참조: Effective Java 2nd Edition. Item 1: Consider static factory methods instead of constructor

static factory method는 Factory Method 디자인 패턴이랑 같은 것이 아니다. 직접적인 관계는 없다.

장점
– 이름을 가질 수 있다.
– 매번 새로운 객체를 만들 필요가 없어진다.
– 하위 타입을 반환할 수 있다. -> service provider framework
– 타입 매개변수를 가진 클래스 객체를 생성할 때 간결하게 쓸 수 있다. -> type inference

Service Provider Framework
– Servide interface: 공급자가 구현할 인터페이스. ex) Connection
– Provider registration API: 시스템이 구현체를 등록할 때 사용. ex) DriverManager.registerDriver
– Service access API: 사용자가 서비스 객체를 얻어올 때 사용. == fexible static factory. ex) DriverManager.getConnection
– (option) Service provider interface: 공급자가 서비스 구현체의 객체를 생성할 때 구현한다. ex) Driver

단점
– public 또는 protected 생성자 없이 static factory method만 제공하는 클래스는 상속할 수 없다.
– 다른 static factory method랑 확연하게 구분이 안 된다. -> 이름을 잘 짓자.(valueOf, of, getInstance, newInstance, getType, newType)