정적 팩터리 메서드의 장점
- 기본 생성자는 이름(형식)이 고정되어 있지만, 정적 팩터리 메서드는 메서드의 이름을 이용하여 의도를 나타낼 수 있음
- 추가하려는 생성자들의 시그니처(타입 및 개수)가 동일한 경우 고려할 수 있음
- 파라미터 속성이 같은 경우 이름을 가지는 정적 팩터리 메서드 고려
- 싱글톤 패턴으로 이용할 수 있음
- 기본 생성자로는 생성하는 과정을 제어할 수 없음
- 기본 생성자를 private 으로 선언 후 정적 팩터리 메서드만으로만 접근 가능하도록 설정
- 정적 팩터리 메서드 호출 시 미리 만들어뒀던 객체 반환
- 사용하는 측에서 구현체에 접근하지 않아도 사용할 수 있음
- 인터페이스를 이용하여 반환값을 추상화
- 구현체에 의존적이지 않아 유연성 증가
정적 팩터리 메서드의 단점
- 정적 팩터리 메서드만을 사용하기 위해 기본 생성자를 private 으로 설정한 경우 상속할 수 없음
- 싱글톤 패턴 시 기본 생성자를 private 으로 설정하면 해당 클래스는 상속 불가능
- 하위 클래스 생성 시 상위 클래스의 생성자 호출
- 상속은 불가능하나 상속하고자 했던 클래스의 필드로써 관리할 수도 있음 (조합)
- javadoc 으로 확인할 경우 일반 메서드들 사이에서 정적 팩터리 메서드를 구분하기 어려움
mvn javadoc:javadoc
명령어를 통해 자바 document 를 생성할 수 있음
- target > site > apidocs > index.html
- 정적 팩터리 메서드는 결국 메서드이기 때문에 일반 메서드란에 분류됨
- 정적 팩터리 메서드임을 구분하기 위해 주로 사용하는 네이밍 패턴 사용 권장
- of, from, valueOf, getInstance, newInstance 등
- 문서화(주석) 을 통해 javadocs 에 설명을 남길 수도 있음
완벽 공략1 - 열거 타입
- 상수 목록을 담을 수 있는 데이터 타입
- 특정한 변수가 가질 수 있는 값을 제한할 수 있음 (Type-Safety 보장)
- 싱글톤 패턴을 구현할 때 사용하기도 함
완벽 공략2 - 플라이웨이트 패턴
- 같은 객체가 자주 요청되는 경우 플라이웨이트 패턴을 사용할 수 있음
- 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴
- 자주 변하는 속성 (또는 외적인 속성, extrinsit) 과 변하지 않는 속성 (또는 내적인 속성, intrinsit) 을 분리하고 재사용하여 메모리 사용을 줄일 수 있음
- 자주 변하지 않는 속성을 관리하는 Factory 객체를 만들고 꺼내서 사용하는 방식
- Factory 객체는 상수처럼 자주 사용되는 값을 관리하므로 정적 팩터리 메서드 활용 가능

완벽 공략3 - 인터페이스와 정적 메서드
- 자바 8와 9에서 추가된 인터페이스의 변화
- 기본 메서드(default method) 와 정적 메서드를 가질 수 있음
- 기본 메서드
- 인터페이스에서 메서드 선언 뿐만 아니라 기본적인 구현체까지 제공
- 기존의 인터페이스를 구현하는 클래스에 새로운 기능을 추가
- 구현체에서 접근 가능