공부하는 스누피

[디자인 패턴] 정적 팩터리 메서드 (static factory method) 본문

Languages/Java

[디자인 패턴] 정적 팩터리 메서드 (static factory method)

커피맛스누피 2021. 2. 15. 22:58

정적 팩터리 메서드란?

팩터리 메서드는 디자인 패턴 중 생성 패턴의 한 종류로, 생성자로 직접 객체 인스턴스를 생성하는 대신 메서드가 객체를 생성해 반환값으로 넘긴다. 클라이언트는 팩터리가 건네주는 객체가 원하는 클래스의 하위 클래스이기만 한다면 어느 클래스의 인스턴스인지 알 필요가 없게 한다. 

 

장점

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
Comments