320x100

프로그래밍 89

[생성 패턴] - 빌더(Builder)

구조 #pragma once #include #include class ISubject { public: virtual void Operation() = 0; virtual void SetName(std::string& name) = 0; }; class Subject : public ISubject { public: void Operation() override { std::cout SetName("SubjectA"); ISubject* subject = builder->GetSubject(); subject->Operation(); system("pause"); return 0; } 생성자를 통해 객체(Subject)를 직접 생성하는 대신에, 빌더 객체(Builder)가 객체의 생성을 대신 수행하게 ..

프로그래밍/GoF 2022.01.12

[생성 패턴] - 추상 팩토리(Abstract Factory)

구조 #pragma once #include class IProduct { public: virtual void Operation() = 0; }; class IAbstractFactory { public: virtual IProduct* CreateProduct() = 0; }; class ProductA : public IProduct { public: void Operation() override { std::cout Operation(); system("pause"); return 0; } 구조의 생성을 수행하는 팩토리 클래스(AbstractFactory)를 정의하여 클라이언트가 팩토리 클래스의 인터페이스(CreateProduct())를 통해 구조를 생성할 수 있게 한다. 추상 팩토리 구조의 생성..

프로그래밍/GoF 2022.01.12

[구조 패턴] - 프록시 (Proxy)

구조 #pragma once #include class Subject { public: virtual void request() = 0; }; class RealSubject : public Subject { void request() override { std::cout request(); return 0; } 프록시 객체는 웨이터와 같이 클라이언트와 객체 사이의 중개를 담당한다. 클라이언트로부터의 요청을 대신 받고, 이를 실제 객체에게 전달한다. 그러므로 프록시는 클라이언트에게 실제 객체와 동일한 인터페이스를 제공하나, 실제 객체에 대한 정보를 클라이언으로부터 은닉시킨다. 또한 프록시에 별도의 로직을 추가함으로써 실제 객체의 흐름을 제어할수도 있다.

프로그래밍/GoF 2022.01.12

[구조 패턴] - 파사드(Facade)

구조 #pragma once #include class ClassA { public: void Operate() { std::cout OperateClassC(); return 0; } 파사드 객체는 클라이언트를 대신하여 객체들과 상호 작용하며, 객체들을 통합시킨 간략한 인터페이스를 클라이언트에게 제공한다. 클라이언트가 내부 구조에 의존하지 않고 파사드 객체를 통해 객체 구조를 제어할 수가 있어 코드의 유연성이 향상된다.

프로그래밍/GoF 2022.01.11

[구조 패턴] - 어댑터(Adapter)

구조 #pragma once #include class IAdapter { public: virtual void OperateAdapter() = 0; }; class Adaptee { public: void OperateAdaptee() { std::cout OperateAdapter(); return 0; } 클래스에 인터페이스를 직접 구현하는것도 방법이지만, 그것은 SOLID의 개방-폐쇄의 원칙에 어긋나기도 하고 라이브러리를 사용하는 경우 수정이 불가능하기도 하다. 클래스(Adaptee)와 인터페이스(IAdapter) 사이에 어댑터의 개념을 가진 클래스(ImplementationAdapter)를 만들어 클라이언트에게 클래스에 대한 인터페이스를 제공한다. 클라이언트는 클래스와 연결된 어댑터를 인터페이..

프로그래밍/GoF 2022.01.10
320x100