이펙티브자바 2

Item15. 클래스와 멤버의 접근 권한을 최소화하라

클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계도니 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. 잘 설계된 컴포넌트는 모두 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서 다른 컴포넌트와 소통하고 서로의 내부 방식은 전혀 개의치 않는다. 소위 캡슐화라고 부르는 이 개념은 소프트웨어 설계의 근간이 되는 원다. 캡슐화의 장점 중 대부분은 시스템 컴포넌트를 독립적으로 만들어서 개발, 테스트, 최적화, 적용, 분석, 수정을 개별적으로 할 수 있게 하는 것과 연관이 있다. 컴포넌트를 병렬로 개발하는 것이 가능하므로 개발 속도 향상 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌..

#1 생성자 대신 정적 팩터리 메서드를 고려하라

Item #1 생성자 대신 정적 팩터리 메서드(static factory method)를 고려하라. 1. 이름을 가질 수 있다 생성자만으로 객체의 특성을 설명할 수 없다. 이름을 지을 수 있다면 객체의 특성을 좀 더 구체적으로 묘사할 수 있다. BigInteger(int, int, Random) 보다 BigInteger.probablePrime 이 더 좋은 이름이다. 2.호출될 때마다 인스턴스를 생성하지 않아도 된다 불변 클래스는 인스턴스를 미리 만들어 두거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. 생성 비용이 큰 객체라면 성능을 끌어올릴 수 있다. 반복되는 요청에 같은 인스턴스를 반환하는 식으로 정적 팩터리 방식은 언제 어느 인스턴스를 살아있게 할 것인지..