메서드를 통해 객체를 생성하는 목적 명시 가능
new 키워드를 통해 겍체를 생성하는 생성자는 객체 내부의 구조를 잘 알고 있어야 옳바른 목적으로 객체를 생성할 수 있음 →
정적 팩토리 메서드는 메서드 이름을 통해 객체 생성의 목적을 명시할 수 있음
인스턴스에 대해 통제 , 관리가 가능
메서드를 통해 간접적으로 객체를 생성하기 때문에 전반적인 객체 생성 , 통제 관리가 가능함 → 항상 새로운 객체를 생성해서 반환할 수 있고 또는 객체 하나만 만들어 이를 공유하여 재사용할 수 있음 (싱글톤 패턴)
하위 자료형 객체 반환이 가능
메서드 호출을 통해 얻을 객체의 인스턴스를 자유롭게 선택할 수 있음 (다형성을 응용)
객체 생성을 캡슐화 할 수 있음
new 키워드를 통한 생성자를 사용시 외부에 내부 구현을 드러내야함 , 하지만 정적 팩토리 메서드는 구현부를 외부로 부터 숨길 수 있어 OOP의 특징중 하나인 캡슐화 , 정보은닉을 가능하게 함 , 또한 구현체를 숨겨 의존성을 제거해주는 장점을 가지고 있음
확장성의 제한
정적 팩토리메서드로 클래스를 설계하면 생성자를 private 제어자로 설정하게 됨 → 따라서 상속을 이용한 확장이 불가능 해짐
자동 문서화의 어려움
생성자의 경우 자바의 언어 스펙이기 때문에 자동 문서화 라이브러리 들이 이를 추적하여 자동으로 문서화를 가능하게 해줌 → 하지만 정적 팩토리 메서드는 프로그래머가 임의로 만든 메서드이기 때문에 문서를 보는 사람이 이를 찾고 , 이해해야함
따라서 정적 팩토리 메서드 네이밍 컨벤션을 잘 지켜서 소통을 원할하게 해야할 필요가 있음
정적 팩토리 메서드(Static Factory Method)는 왜 사용할까?