공부하는 스누피
[디자인 패턴] 정적 팩터리 메서드 (static factory method) 본문
정적 팩터리 메서드란?
팩터리 메서드는 디자인 패턴 중 생성 패턴의 한 종류로, 생성자로 직접 객체 인스턴스를 생성하는 대신 메서드가 객체를 생성해 반환값으로 넘긴다. 클라이언트는 팩터리가 건네주는 객체가 원하는 클래스의 하위 클래스이기만 한다면 어느 클래스의 인스턴스인지 알 필요가 없게 한다.
장점
1. 생성자보다 더 구체적인 이름을 가질 수 있다.
=> 메서드 호출 시 직관적으로 기능을 짐작할 수 있다.
2. 메서드가 호출될 때마다 인스턴스를 생성하지 않아도 된다.
=> 생성자는 호출될 때마다 인스턴스를 생성해서 인스턴스를 재활용하기 어려울 뿐더러 불변 클래스에 적용할 수 없다.
=> 이 특징은 싱글톤을 구현할 때 적용된다. 한 싱글톤 클래스당 하나의 인스턴스만을 보장하기 때문이다.
=> 인스턴스를 재활용한다는 특징은 플라이웨이트 패턴(Flyweight pattern)의 근간인 인스턴스 통제와 연결된다.
3. 반환 타입의 하위 타입 객체를 반환할 수 있다.
=> 곧 다형성의 장점이다.
4. 입력 매개변수에 따라 다른 클래스의 객체를 반환할 수 있다.
=> 다형성을 보장해서 하위 클래스가 반환되더라도 유연하게 작업을 수행할 수 있다.
5. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 없어도 된다.
=> 런타임에서 객체 생성 작업을 수행하기 때문이다.
=> 반면 생성자를 쓰면 컴파일러가 이부분을 체크해서 Non-Runtime Exception이 발생한다.
단점
1. 상속할 수 없다.
=> 상속 대신 Composition
2. IDE가 객체 생성 부분을 대신 찾아주지 않는다...
=> 찾기 불편하다...
자주 쓰이는 팩터리 메서드 명명 방식
- from: 매개변수 하나 받아서 같은 타입 객체 반환하는 메서드.
- of: 매개변수 여러개 받아서 적합한 타입 객체 반환하는 메서드.
- getInstance: 인스턴스를 반환하지만 매개 변수 있더라도 같은 타입임을 보장하진 않는다. 싱글톤에서 쓰인다.
- valueOf: 더 자세한 타입 객체를 반환한다. (ex. BigInteger->Integer반환)
(참고)
Effective Java 3/E (2018). Joshua B
'Languages > Java' 카테고리의 다른 글
[Java] equals()와 hashCode() (0) | 2021.02.27 |
---|---|
[디자인 패턴] 자바의 싱글턴(Singleton) (0) | 2021.02.16 |
[JAVA] OOP 특징 (0) | 2021.02.07 |
[JAVA] String Class (0) | 2021.01.25 |
[JAVA] Type casting (0) | 2021.01.13 |