Design Patterns/Creational Patterns

Design Patterns/Creational Patterns

Singleton Pattern (C++)

Sigletone Pattern (C++) 목적 프로그램 내에서 어떤 클래스가 오직 한 개의 인스턴스만 갖도록 보장하고 접근 할 수 있는 인터페이스를 제공한다. 자주 사용되지만 여러 인스턴스가 생성될 필요가 없는 경우 사용된다. (예 dbconnection, networking, config ...) c++에서 쓰레드 안전성을 위해 local static 변수를 활용하여 static Instance() 인터페이스를 구현했다. 전역 변수와 차이가 없어보이나 다음과 같은 이점이 있다. 1. 인스턴스를 인터페이스를 통해 유일하게 접근함. 2. name space를 좁혀줌 그러나 싱글톤을 남용할 경우 클래스간의 결합도가 커지는 문제점이 있다. 사용 시나리오 프로그램 내에서 네트워크에 접속하고 종료하는 기능을 하..

Design Patterns/Creational Patterns

Prototype Pattern (C++)

Prototype Pattern (C++) 목적 현재 객체를 복사하여 (속성값이 동일한 또는 거의 유사한)새로운 객체를 생성한다. java에서 clonnable 인터페이스(아래의 prototype class)와 동일하다. clone함수를 구현할 때 얕은 복사를 주의해야한다. 사용 시나리오 포토샵이나 ppt에서 도형을 복사하는 시나리오가 있다. 각각의 도형은 현재 도형의 바로 옆(x축으로 +1만큼 이동)에 생성 된다. [Prototype] class ShapePrototype { public: virtual ShapePrototype* clone() = 0; }; [ConcretePrototype] class Circle : public ShapePrototype { public: Circle(int x..

Design Patterns/Creational Patterns

Builder Pattern (C++)

Builder Pattern (빌더 패턴) 목적 복잡한 객체를 생성하는 방법과 표현하는 방법을 분리한다. 즉, 생성 패턴의 결과물인 Product의 속성을 결정하는 부분과 생성하는 부분을 분리시킨다. Product를 생성할 때 Product에 전달해야 할 파라미터가 많다면 빌더 패턴을 고려해보는게 좋다. 사용 시나리오 Computer객체를 생성해야 하는 시스템이 있다. Computer객체는 각각 cpu, ram, ssd를 설정해야 하며 각각의 컴퓨터 제조사마다 스펙은 다르다. 각각 제조사마다 Builder를 만들고 Builder를 Director로 넘겨 Computer를 생산한다. 최종적으로 Client는 Director를 통해서 Product를 전달 받는다. [Product] class Computer..

Design Patterns/Creational Patterns

Factory Method Pattern (C++)

Factory Method Pattern (팩토리 메소드 패턴)목적객체 생성을 서브클래스에 위임하고 객체 생성단계에서 필요한 공통적인 부분을 모아 구조화 한다. 이러한 구조화 과정에서 Template Method Pattern이 사용된다. (NVI와 일맥상통)결론적으로 Template Method를 활용하여 객체를 생성하는 패턴이다. 사용 시나리오아래와 같은 기능을 만든다고 생각해보면 doc,hwp,ppt등 여러 파일을 생성해서 사용한다.파일들을 생성할 때 항상 db로 부터 정보를 가져와서 파일을 만든다.파일 생성이 완료되면 생성 완료됨을 db에 로그로 남긴다.UML상에서 각각의 파일들 hwp,doc등은 ConcreteProduct에 해당한다. 이러한 파일들을 생성해주는 각각의 팩토리는 ConcreteC..

Design Patterns/Creational Patterns

Abstract Factory Pattern (C++)

Abstract Factory Pattern (추상 팩토리 패턴)목적서로 관련성이 있거나 독립적인 여러개의 객체들(Product)을 하나의 카테고리로 묶어서 팩토리를 통해 생성한다. Product 객체들과 팩토리를 추상화하여 사용자에게 인터페이스를 제공한다. 사용 시나리오사실 UML이나 디자인패턴의 의도를 읽어보아도 언제 디자인 패턴을 사용해야할지 공감하기는 쉽지 않다. 따라서 현실에서 예를 들어 아래와 같은 기능을 만든다고 가정해보면 팝업창에 스크롤이 하나 달려있는 GUI 프로그램을 만들려고 한다. GUI는 OS(플랫폼)에 따라 다르게 생성되어야 한다. 이러한 경우 추상 팩토리 패턴을 활용하여 OS별로 GUI를 만들어 주는 팩토리와 스크롤,팝업창을 만들면 된다. 거기에 추가적으로 팩토리들을 추상화 하고..

Design Patterns/Creational Patterns

Creational Pattern (생성 패턴)

GoF의 디자인 패턴은 목적에 따라 크게 세가지로 분류를 나눌 수 있다. 생성 패턴, 구조 패턴, 행동 패턴 세가지로 나뉘며 먼저 생성 패턴에 대해서 공부를 진행해보려 한다. 생성 패턴에는 다음과 같이 5가지 패턴들이 있다.Abstract Factory BuilderFactory MethodPrototypeSingleton생성 패턴은 인스턴스를 생성할 때 유연성 있는 방법들을 제공해준다. 객체지향에서 유연성이 있다라는 말은 SOLID 원칙을 잘 따르는 구조라고 생각하면 될 것 같다. GoF의 디자인패턴에서 명시 되어있는 생성 패턴의 특징을 보면- 생성 패턴은 시스템이 어떤 구체 클래스를 사용하는 지에 대한 정보를 캡슐화.- 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 서로 맞붙는지에 대한..

자유로운 범고래
'Design Patterns/Creational Patterns' 카테고리의 글 목록