이펙티브 자바3 2

[이팩티브 자바3] 제 4장. 클래스와 인터페이스

1. 클래스와 멤버의 접근 권한을 최소화 하라. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리이다. 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성을 명시한다. private : 멤버를 선언한 톱레벨 클래스에서만 접근할 수 있다. package-private : 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있다. (접근 제한자를 명시하지 않았을 때 적용되는 패키지 접근 수준, 단 인터페이스의 멤버는 기본적으로 public) protected : package-private의 접근 범위를 포함하며, 이 멤버를 선언한 클래스의 하위 클래스에서도 접근 할 수 있다. pub..

[이팩티브 자바3] 제 2장. 객체 생성과 파괴

1. 생성자 대신 정적 팩터리 메서드를 고려하라. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사 할 수 있다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 생성 비용이 큰 객체가 자주 요청되는 상황에서 성능을 상당히 끌어올려 준다. 반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩터리 방식의 클래스는 통제가 가능하다.(인스턴스 통제 클래스) 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. API를 만들 때 구현 클래스를 공개하지 않고도 그 객체를 반환 가능하다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 팩터리 메서드에 흔히 사용하는 ..