[Effective Java 3/e] 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라


아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라

  • 대표적인 정적 팩터리 메서드
public static Boolean valueOf(boolean b) {
  return b ? Boolean.TRUE : Boolean.FALSE;
}

정적 팩터리 메서드 장점

  • 이름을 가질 수 있다.
  • 호출될 때마다 인스터스를 새로 생성하지 않아도 된다.
  • 반환 타입의 하위 타입 객체를 반환할 수 있다.
    • 구현 클래스를 공개하지 않고도 객체를 반환할 수 있어 API를 작게 유지할 수 있다.
  • 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
  • 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.

정적 팩터리 메서드 단점

  • 정적 팩터리 메서드만 제공하면 생성자가 없으므로 하위 클래스를 만들 수 없다.
  • 프로그래머가 찾기 어렵다.

아이템 1 - 정리

  • 무작정 public 생성자를 제공하기보단 각자의 쓰임새에 맞게 사용하자.