본문 바로가기
SW

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 생성 패턴에 대한 논의

by 라꾸스떼(YR) 2020. 4. 23.
반응형

[생성 패턴에 대한 논의]

시스템이 생성하는 객체의 클래스로 시스템을 매개변수화하는 일반적인 방법 두가지.

1.객체를 생성하는 클래스를 상속해서 서브클래스를 만드는 것 - 팩토리 메서드

단점은 제품 클래스가 바뀔 때마다 새로운 서브클래스를 생성해야 한다는 것. 제품 생성자가 팩토리 메서드로 생성되면 생성자를 다시 재정의해야 한다.

2.객체 합성으로 시스템을 매개변수화하는 것. 제품 객체의 클래스를 파악할 책임이 있는 객체를 정의하고 이를 시스템의 매개변수로 만든다. - 추상팩토리, 빌더, 원형 패턴

 

이 세가지 패턴은 팩토리 객체를 만든다. 이 팩토리 객체는 제품 객체를 생성하는 책임을 갖는 객체이다. 추상 팩토리 패턴은 여러 클래스의 객체를 생성하는 팩토리 객체를 갖고 있으며, 빌더 패턴은 복잡한 프로토콜을 이용하여 제품을 구축하는 팩토리를 갖는다. 원형 패턴은 원형 객체를 복사하여 제품을 구축하는 팩토리를 갖는다. 팩토리 객체와 원형은 동일한 객체이다. 원형은 제품 객체를 반환하는 책임을 맡기 때문이다.

추상 팩토리 패턴은 팩토리 메서드 패턴과 비슷하게 클래스 계층이 커지는 문제가 있기 때문에 팩토리 메서드의 문제를 별로 개선해 주지 못한다. 팩토리 메서드는 설계를 사용자가 입맛에 맞게 고칠 수 있도록 해 주면서 그 설계가 복잡해지지 않게 한다. 다른 디자인 패턴은 새로운 클래스가 필요한 반면, 팩토리 메서드 패턴에서는 새로운 연산만 정의하면 된다. 인스턴스화할 클래스가 변하지 않거나 초기화 연산처럼 서브클래스들이 쉽게 재정의할 수 있는 연산에서 인스턴스화가 된다면 상속으로도 쉽게 해결할 수 있으므로 이때는 꼭 팩토리 메서드를 사용할 필요는 없다.

추상 팩토리, 원형 또는 빌더 패턴을 사용하는 설계는 팩토리 메서드를 사용하는 설계보다 더 유연하다. 팩토리 메서드를 사용해서 시작한 설계에 좀더 유연성을 부가할 필요가 있다면 다른 생성 패턴을 사용하는 설계로 진화한다.

반응형

댓글