public 생성자를 이용해서 객체를 생성하는 방법뿐 아니라, public static 팩토리 메소드를 사용해서 클래스의 인스턴스를 만드는 방법이 있다.

무조건 적으로 좋다는 것이 아니라 static 팩토리 메소드의 장점과 단점을 고려해서 사용하도록 해야한다.

장점 1. 이름을 가질 수 있다.

장점 2. 반드시 새로운 객체를 만들 필요가 없다.

장점 3. 리턴 타입의 하위 타입 인스턴스를 만들 수도 있다.

장점 4. 리턴하는 객체의 클래스가 입력 매개변수에 따라 매번 다를 수 있다.

장점 5. 리턴하는 객체의 클래스가 public static 팩토리 메소드를 작성할 시점에 반드시 존재하지 않아도 된다.

장점 3과 4와 비슷한 개념으로 보인다.

서비스 프로바이더 프레임워크는 서비스의 구현체를 대표하는 서비스 인터페이스와 구현체를 등록하는데 사용하는 프로바이더 등록 API 그리고 클라이언트가 해당 서비스의 인스턴스를 가져갈 때 사용하는 서비스 엑세스 API가 필수로 필요하다.

부가적으로, 서비스 인터페이스의 인스턴스를 제공하는 서비스 프로바이더 인터페이스를 만들 수도 있는데, 그게 없는 경우에는 리플랙션을 사용해서 구현체를 만들어 준다.

단점 1: public 또는 protected 생성자 없이 static public 메소드만 제공하는 클래스는 상속할 수 없다.

하나의 예시로 들자면, Collections 프레임워크에서 제공하는 편의성 구현체(java.util.Collections)는 상속할 수 없다.

단점 2: 프로그래머가 static 팩토리 메소드를 찾는게 어렵다.