[Effective JAVA] Item1. 생성자 대신 정적 팩터리 메소드를 고려하라

보람찬하루·2024년 4월 20일
0

Effective JAVA

목록 보기
1/8

  • 클라이언트가 클래스의 인스턴스를 얻는 방법
    1. public 생성자
    2. static factory method(≠디자인 패턴)

  • static factory method의 장점
    1. 이름을 가질 수 있다.

      → 이름을 통한 반환될 객체의 특성 묘사 가능

    2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.

      → 불필요한 객체 생성 피할 수 있음 ( 인스턴스 미리 생성 or 인스턴스 캐싱 후 재활용)

      ⇒ 인스턴스의 생명주기 철저히 통제 가능

      ( 통제의 이유 : 싱글턴 혹은 인스터스화 불가로 연결 가능, 동치의 인스턴스가 1개임을 보장)

    3. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력

    4. 입력 매개변수에 따라 매번 다른 클래스의 객체 반환 가능

    5. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 됨


  • static factory method의 단점
    - 상속을 하려면 public이나 protected 생성자가 필요하여 정적 팩터 리 메서드만 제공하면 하위 클래스를 만들 수 없다.
    - 정적 팩터리 메서드는 프로그래머가 찾기 어렵다.

    ☀️ 핵심정리

    정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다.
    그렇다고 하더라도 정적 팩터리를 사용하는 게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관이 있다면 고치자.

profile
를 만들어 가자

1개의 댓글

comment-user-thumbnail
2024년 4월 20일

무작정 public 생성자 만드는 거 언제 지켜보셨어요

답글 달기