본문 바로가기

SW171

GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 4장 구조 패턴 :: 적응자(Adapter) [적응자(Adapter) - 클래스, 객체 구조(Class, Object Structural)] 클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 적응(변환)시킨다. 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킨다. 래퍼(Wrapper) 이미 개발된 클래스의 인터페이스를 수정할 수 없다면, Shape와 TextView 인터페이스에 둘 다 맞도록 우리가 개발한 TextShape 클래스를 조정해야 한다. -Shape의 인터페이스와 TextView의 구현을 모두 상속받는다. → 적응자 패턴 클래스 버전 -TextView의 인스턴스를 TextShape에 포함시키고, TextView 인터페이스를 사용하여 TextShape를 구현한다. → 적응자 패턴 객체 버전 TextShape = 적응자(.. 2020. 4. 25.
GoF의 디자인 패턴(Design Patterns: Elements of Reusable Object-Oriented Software) - 4장 구조 패턴 [Chapter 4.구조 패턴(Structural Pattern)] 구조 패턴은 더 큰 구조를 형성하기 위해 어떻게 클래스와 객체를 합성하는가와 관련된 패턴이다. 구조 클래스 패턴은 상속 기법을 이용하여 인터페이스나 구현을 복합한다. 이 패턴은 서로 독립적으로 개발한 클래스 라이브러리를 마치 하나인 양 사용할 필요가 있을 때 매우 유용한 방법이다. 한 가지 예가 적응자 패턴을 사용한 클래스 형태이다. 일반적으로 적응자는 어떤 인터페이스가 다른 인터페이스를 따르게 만들어 서로 다른 인터페이스들의 통일된 추상을 제공한다. 이를 가능하게 하려고, 적응자 클래스는 적응 대상 클래스(adaptee)에서 특성들을 상속받아, 적응 대상자에 정의된 인터페이스를 마치 자신이 제공하는 것처럼 보여준다. 구조 객체 패턴은 .. 2020. 4. 24.
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.