본문 바로가기

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software)47

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 생성 패턴에 대한 논의 [생성 패턴에 대한 논의] 시스템이 생성하는 객체의 클래스로 시스템을 매개변수화하는 일반적인 방법 두가지. 1.객체를 생성하는 클래스를 상속해서 서브클래스를 만드는 것 - 팩토리 메서드 단점은 제품 클래스가 바뀔 때마다 새로운 서브클래스를 생성해야 한다는 것. 제품 생성자가 팩토리 메서드로 생성되면 생성자를 다시 재정의해야 한다. 2.객체 합성으로 시스템을 매개변수화하는 것. 제품 객체의 클래스를 파악할 책임이 있는 객체를 정의하고 이를 시스템의 매개변수로 만든다. - 추상팩토리, 빌더, 원형 패턴 이 세가지 패턴은 팩토리 객체를 만든다. 이 팩토리 객체는 제품 객체를 생성하는 책임을 갖는 객체이다. 추상 팩토리 패턴은 여러 클래스의 객체를 생성하는 팩토리 객체를 갖고 있으며, 빌더 패턴은 복잡한 프로토.. 2020. 4. 23.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 단일체(Singleton) [단일체(Singleton) - 객체 생성] 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근성을 제공한다. 클래스 자신이 자기의 유일한 인스턴스로 접근하는 방법을 자체적으로 관리한다. 이 클래스는 또 다른 인스턴스가 생성되지 않도록 할 수 있고, 클래스 자신이 그 인스턴스에 대한 접근 방법을 제공할 수 있다. 이를 가리켜 단일체 패턴이라고 한다. -클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근점(Access Point)으로 모든 사용자가 접근할 수 있도록 해야 할 때 -유일한 인스턴스가 서브클래싱으로 확장되어야 하며, 사용자는 코드의 수정없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때 - -Singleton : Instance() 연산을 정의하.. 2020. 4. 22.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 원형(Prototype) [원형(Prototype) - 객체생성] 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성한다. GraphicTool 클래스는 프레임워크 설계자에게 문제를 일으킬 수 있다. 음표와 보표에 대한 클래스는 지금 개발할 응용프로그램에만 국한된 것이고, GraphicTool 클래스는 범용적인 프레임워크에 속해있는 것이다. 즉, 이러한 GraphicTool은 악보에 추가할 음악 클래스들의 인스턴스를 어떻게 생성해야 하는지 알지 못한다. 이런 이유로 응용프로그램에서 필요한 음악 객체를 각각 생성하려면 GraphicTool을 상속받는 새로운 서브클래스를 만들어야 한다. 그러나 이렇게 되면 인스턴스화해야 하는 각 음악 객체 종류마다 여러 가지 다른 서브클래.. 2020. 4. 21.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 팩토리 메서드(Factory Method) [팩토리 메서드(Factory Method) - 클래스 생성(Class Creational)] 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 한다. 가상 생성자(Virtual Constructor) 프레임워크는 추상 클래스를 사용하여 객체 간의 관련성을 정의하고 유지할 수 있다. 또한 프레임워크는 이들 객체를 생성할 책임을 지닌다. 프레임워크는 이들 추상 클래스 간의 상호작용을 책임져서 전체 시스템의 기본 동작 방식을 정의한다. 그리고 이들 추상 클래스를 상속하는 서브클래스에서 구체적인 행동을 정의하믕로써 새로운 응용프로그램을 만든다. 프레임워크는 클래스를 인스턴스로 만들어야 하지만, 추상 클래스 밖에 모르는 프레임워크는 클래스의 인스.. 2020. 4. 20.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 빌더(Builder) [빌더(Builder) - 객체 생성] 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 한다. 각 변환기(converter) 클래스들은 복잡한 객체를 생성하고 조립하는 데 필요한 메커니즘을 Converter 클래스에 정의된 인터페이스의 각 연산에 구현한다. 이러한 변환기를 판독기와 분리시켜서, 판독기는 RTF 문서의 책임만 지게 하자는 것이다. 빌더 패턴은 이런 문제를 푸는 데 쓴다. 지금까지 등장한 각 변환기 클래스들이 바로 빌더 패턴에서 쓰는 용어인 "빌더"이다. 그리고 판독기는 디렉터(director)라 한다. -복합 객체의 생성 알고리즘이 이를 합성하는 요소 객체들이 무엇인지 이들의 조립 .. 2020. 4. 19.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 3장 생성 패턴 :: 추상 팩토리(Abstract Factory) [추상 팩토리(Abstract Factory) - 객체 생성(Object Creational)] 상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공한다. 서로 다른 룩앤필은 서로 다른 사용자 인터페이스의 표현 방식과 행동을 갖는다. 개발한 응용프로그램이 서로 다른 룩앤필 표준에 상관없이 이식성을 가지려면, 응용프로그램이 각 사용자 인터페이스 툴킷에서 제공하는 위젯을 직접 사용하지 못하도록 해야 한다. 이런 문제는 구체적 사용자 인터페이스의 위젯을 사용하지 말고 추상 클래스인 WidgetFactory를 정의하여 해결하는 게 좋다. WidgetFactory 클래스는 위젯의 기본 사용자 인터페이스 요소(윈도우, 스크롤바, 버튼 등)를 생성할 수.. 2020. 4. 17.