목록Java/이펙티브 자바 (3)
공부함
클래스와 인터페이스 설계에 사용하는 강력한 요소를 활용하는 방법을 알아보자. [아이템 15] 클래스와 멤버의 접근권한을 최소화하라 잘 설계된 컴포넌트는 내부 구현을 완벽히 숨겨 구현과 API를 깔끔하게 분리한다. APi를 통해서만 다른 컴포넌트와 소통한다. 이것을 정보 은닉, 캡슐화라고 하며 sw 설계의 근간이 되는 원리다. 캡슐화의 장점은 다음과 같다 개발 속도가 높아진다. 여러 컴포넌트 병렬 개발이 가능하기 때문이다. 관리 비용을 낮춘다. 디버깅, 교체 부담이 적다. 성능 최적화에 도움을 준다. 최적화할 컴포넌트를 정하고 다른 컴포넌트에 영향을 주지 않고 최적화 할 수 있다. 재사용성을 높인다. 컴포넌트가 외부에 거의 의존하지 않고 독자적으로 동작할 수 있기 때문이다. 큰 시스템 제작 난이도를 낮춘다..
Object 클래스의 final이 아닌 메서드들은 재정의를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약을 따라야 한다. 잘못 구현하면 클래스가 이 규약을 준수한다고 가정하는 HashMap 같은 클래스가 오동작할 수 있다. [아이템 10] equals는 일반 규약을 지켜 재정의하라 먼저 equals를 재정의하지 않아야 할 상황이 있다. 각 인스턴스가 본질적으로 고유하다 값이 아닌 동작하는 개체 표현 , Thread 논리적 동치성을 검사할 일이 없다 상위 클래스 equals가 하위 클래스에 들어맞는다 클래스가 private이거나 package-priavte이고 equals를 호출할 일이 없다. equals가 실수로라도 호출되는걸 막고 싶다면 오버라이딩해서 예외를 던지도록 하자 equals는 ..
[아이템 1] 생성자 대신 정적 팩터리 메서드를 고려하자 정적 팩터리 메서드는 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체로는 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리 메서드는 이름만 잘 지으면 반환될 객체의 특성을 잘 묘사할 수 있다. 2. 호출될 떄마다 인스턴스를 새로 생성하지 않아도 된다. 생성자는 호출될 때마다 인스턴스를 만들어야 하지만, 정적 패터리 메서드는 그렇지 않다. 반복되는 요청에 같은 객체를 반환할 수 있다. 따라서 언제 어느 인스턴스를 살아있게 할지 통제할 수 있다. 이런 클래스를 인스턴스 통제 클래스라 한다. 3. 반환 타입의 하위 타입 객체를 반환할 수 있다. 반환될 객체의 타입을..