아래의 글은 조슈아 블로크 저/개앞맵시 역, 『이펙티브 자바 Effective Java 3/E
』, 인사이트(2018), 7-13 쪽의 내용을 기반으로 작성하였습니다.
자바의 기본적인 객체 생성은 생성자를 통한 생성임.
생성을 제어하기 위한 다양한 방법으로 singleton 패턴과 , enum 방식의 singleton 방식 등이 있음
생성의 편의와 생성시 파라미터를 주기위한 제어 목적으로 static factory method와 빌터 패턴 등이 있음
static factory method 패턴은 다음과 같은 장점이 있다.
1. 생성에 특정한 의미를 주어 가독성을 높인다.
Foo f = new Foo(); // 생성자 방식
Foo f = new Foo(20); // 20이 뭐지?
Foo f = new Foo(20, 10); // 20은 뭐고 10은 뭐지?
Foo f = new Foo(10, 20); // 순서가 다르면 다른 의미 // 다른 시그너쳐 못반들어냄 (int, int)는 1개여야함
Foo f2 = Foo.createFoo(); // 팩토리 메소드 방식
Foo f2 = Foo.createFoo().money(20); // 가독성 좋음
Foo f2 = Foo.createFoo().money(20).age(10); // 가독성 훨씬 좋고 유연함
Foo f2 = Foo.createFoo().age(10).money(20); // 순서가 의미가 없음.
주의 : 편하다고 막 남용하지는 말고 파라메터를 많이 set 해야해야되는 경우와 생성 비용이 높은 경우에 활용하면 좋다
2. 인스턴스 생성 제어가 가능
생성을 메서드해서 하므로 생성제어를 매서드 내에서 할 수 있다.
3. 반환 타입의 하위 타입 객체를 반환할 수 있느 능력
4. 입력 매개변수에 따라 매번 다른 클래스이ㅡ 객체를 반환
5. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 됨
static factory method 패턴은 다음과 같은 단점이 있다.
1. 상속 형태는 안됨
2. 어떤 메소드가 정적 메소드인지 알 수 없음 > 그래서 naming convention이 생겨남
정적 팩터리 메서드에 사용하는 naming conventions
방식 |
설명 |
예 |
|
from |
매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드 |
Date d = Data.from(instance) |
|
of |
|
|
|
valueOf |
|
String value1 = String.valueOf(1); String value2 = String.valueOf(1.0L); String value3 = String.valueOf(true); String value4 = String.valueOf('a'); |
|
instance or getInstance |
|
|
|
create or newInstance |
|
|
|
get<Type>, new<Type>, type |
|
|
|
팩토리 메소드 패턴과는 다르다고 봐야한다. ( 팩토리 메소드 패턴 : johngrib.github.io/wiki/factory-method-pattern/)
팩토리 메소드 패턴는 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 함
참고사이트 :
https://johngrib.github.io/wiki/static-factory-method-pattern
정적 팩토리 메서드(static factory method)
static 메서드로 객체 생성을 캡슐화한다
johngrib.github.io
johngrib.github.io/wiki/factory-method-pattern/
팩토리 메소드 패턴 (Factory Method Pattern)
객체를 생성하기 위한 인터페이스를 정의하고, 인스턴스 생성은 서브클래스가 결정하게 한다
johngrib.github.io
medium.com/webeveloper/%EC%8B%B1%EA%B8%80%ED%84%B4-%ED%8C%A8%ED%84%B4-singleton-pattern-db75ed29c36
싱글턴 패턴(Singleton Pattern)
자바와 스프링의 싱글턴 패턴(Singleton Pattern)과 차이점
medium.com
www.baeldung.com/java-constructors-vs-static-factory-methods
Java Constructors vs Static Factory Methods | Baeldung
Learn about static factory methods in Java and why they're sometimes preferred over constructors for instantiating and initializing objects.
www.baeldung.com