책정리/GoF 디자인 패턴

8장 객체 생성을 위한 디자인 패턴

GONII 2019. 1. 26. 14:34
객체 생성을 위한 패턴
객체를 생성하는 방식은 크게 가지로 구분된다.
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 패턴
 
각각의 패턴들은 서로 조합되어 사용되기 때문에 실제 문제를 해결하려고 때에는 어느 패턴만을 고집할 것이 아니라 여러 가지 패턴이 조합된 방식도 해결책으로 고민해 있어야 것이다.
반응형