books/이펙티브 자바 3판3 [이펙티브 자바 : 3장] 클래스와 인터페이스 추상화의 기본 단위인 클래스와 인터페이스는 자바 언어의 심장과도 같다. 그래서 자바 언어에는 클래스와 인터페이스 설계에 사용하는 강력한 요소가 많이 있다. 이번 장에서는 이런 요소를 적절히 활용하여 클래스와 인터페이스를 쓰기 편하고, 견고하며, 유연하게 만드는 방법을 안내한다. [아이템 15] 클래스와 멤버의 접근 권한을 최소화하라 좋은 설계와 어설픈 설계의 차이는 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐에 따라서 드러난다. 좋은 설계는 은닉성을 지키며, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전형 개의치 않는다. 이것을 정보 은닉, 혹은 캡슐화라고 부른다. 이는 소프트웨어 설계의 근간이 되는 원리다. 정.. 2020. 7. 11. [이펙티브 자바 : 2장] 모든 객체의 공통 메소드 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메소드 (equals, hashCode, toString, clone, finalize)는 모두 재정의(오버라이딩)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 그래서 Object를 상속하는 클래스, 즉 모든 클래스는 이 메소드들을 일반 규약에 맞게 재정의 해야 한다. 메소드를 잘못 구현하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스(HashMap과 HashSet 등)를 오동작 하게 만들 수 있다. [아이템 10] equals는 일반 규약을 지켜 재정의하라 equals 재정의가 필요치 않는 경우 하나. 각 인스턴스가 본질적으.. 2020. 6. 27. [이펙티브 자바 : 1장] 객체 생성과 파괴 [아이템 1] 생성자 대신 정적 팩토리 메서드를 고려하라 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 장점 하나 : 이름을 가질 수 있다. 생성자에 제공하는 인자가 반환하는 객체를 잘 설명하지 못할 경우에, 잘 만든 이름을 가진 정적 팩토리를 사용하는 것이 사용하기보다 더 쉽고 읽기 좋다. 그 예로 BigInteger(int, int, Random)과 BigInteger.probablePrime을 들고 있다. 또한, 생성자는 시그니처에 제약이 있다. 똑같은 타입을 파라미터로 받는 생성자 두 개를 만들 수 없으니까 그런 경우에도 정적 팩토리 메서드를 사용하는 것이 유리하다. // 생성자를 사용하는 경.. 2020. 6. 27. 이전 1 다음