별도의 객체 생성의 역할을 하는 클래스 메서드를 통해 간접적으로 객체 생성 유도

그렇다면 멀쩡한 생성자를 냅두고 왜 굳이 한단계 더 거쳐서?

아래 장점은 위 링크를 통해 자세히 다시 확인해보자

  1. 생성 목적에 대한 이름 표현이 가능

    <aside> 💡 정적 팩토리 메서드를 구성하고자 한다면, 반드시 생성자에 private 접근 제어자를 두어 외부에서 new 키워드를 이용하여 객체를 생성하는 것을 잊지 말자!

    </aside>

  2. 인스턴스에 대해 통제 및 관리가 가능하다

    1. 대표적으로 싱글톤 디자인 패턴
    2. 캐싱(Caching) 절차 구조를 구현 → Flyweight 디자인 패턴의 근간
  3. 하위 자료형 객체를 반환할 수 있음

  4. 인자에 따라 다른 객체를 반환하도록 분기할 수 있음

국룰 네이밍 규칙

실무에서의 정적 팩토리 메서드

  1. 네이밍 컨벤션 우수사례 : Optional.of()

  2. 하위 자식 객체 반환 및 캡슐화 우수사례 : List.of()

  3. 인스턴스를 캐싱하여 관리가 가능 우수사례 : Integer.valueOf()

  4. Lombok의 정적 팩토리 메서드 생성

    @RequiredArgsConstructor(staticName = "of")
    class Product {    
    	private Long id;    
    	private String name;
    }
    
    public class Main {    
    	public static void main(String[]args) {
            Product p = Product.of();    
      }
    }
    

정적 팩토리 메서드 문제점