객체 생성을 위한 패턴
객체를 생성하는 방식은 크게 두 가지로 구분된다.
Client가 직접 생성하는 방식과 다른 객체를 이용해서 간접 생성하는 방식으로 구분된다.
객체를 간접 생성하는 방식도 크게 두 가지가 있을 수 있다.
객체를 생성하기 위해 하위 클래스를 정의해서 사용하는 방식
Factory Method패턴에서처럼 객체를 생성하기 위해 하위 클래스를 정의해서 사용하는 방식이다. 이 방식은 새로운 종류의 객체를 생성하려고 할 때마다 다른 하위 클래스를 정의해야 한다는 단점이 있다. 반면 Factory Method 패턴은 다른 패턴들에 비해 커스터마이징 하기가 쉽다는 장점이 있다. 왜냐하면 Factory Method 패턴의 경우 커스터마이징을 하기 위해서는 새로운 클래스의 정의없이 새로운 연산만 정의하면 되기 때문이다. 그리고 Factory 패턴은 다른 패턴들보다 덜 복잡하다는 장점도 있다.
객체들간의 관계를 이용하는 방식
이 방식은 생성의 책임을 지는 객체를 정의하고 이를 사용하는 방식으로 Abstract Factory, Builder, Prototype 패턴들이 여기에 속한다. 즉 이 세가지 페턴들은 모두 객체를 생성할 책임이 있는 Factory 객체를 생성하게 된다. 이 때 Abstract Factory 패턴은 같은 제품군에 속하는 여러 클래스의 객체를 생성하고, Builder 패턴은 복잡한 객체를 조금씩 점진적으로 생성하며, Prototype 패턴은 이미 만들어진 객체를 복제해서 새로운 객체를 만들어준다. 이처럼 Abstract Factory, Prototype, Builder 패턴은 Factory Method 패턴보다 유연하기는 하나 좀 더 복잡하다는 단점이 있다.
[표 8-1] 간접 객체 생성 방식의 비교
비교 항목
|
하위 클래스 이용 방식
|
객체들간의 관계 이용 방식
|
객체 생성 방식
|
객체 생성을 위한 클래스를 정의하고 이를 통해 객체 생성
|
객체들간의 관계를 이용해서 객체 생성을 책임지는 객체 정의 활용
|
대표적인 패턴
|
Factory Method |
Abstract Factory
Builder
Prototype
|
장점 |
객체 생성 과정 변경이 용이
간단한 구조
|
객체 생성이 좀 더 유연함
|
단점 |
새로운 종류의 객체 생성 시 새로운 하위 클래스 정의 필요
|
복잡한 구조
|
생성되는 객체의 최대 개수를 제한
Singleton 패턴
각각의 패턴들은 서로 조합되어 사용되기 때문에 실제 문제를 해결하려고 할 때에는 어느 한 패턴만을 고집할 것이 아니라 여러 가지 패턴이 조합된 방식도 해결책으로 고민해 볼 수 있어야 할 것이다.
반응형
'책정리 > GoF 디자인 패턴' 카테고리의 다른 글
10장 인터페이스와 구현의 명확한 분리 문제(Bridge 패턴) (0) | 2019.01.26 |
---|---|
9장 기존 모듈 재사용을 위한 인터페이스 변경 문제(Adapter 패턴) (0) | 2019.01.26 |
7장 최대 N개로 객체 생성을 제한하는 문제(Singleton패턴) (0) | 2019.01.26 |
6장 복제를 통한 객체 생성문제(Prototype패턴) (0) | 2019.01.15 |
5장 대행 함수를 통한 객체 생성 문제(Factory Method 패턴) (0) | 2019.01.14 |