Design Pattern 8

[Design Pattern] state pattern

state pattern 정의 : 상태 패턴(state pattern)은 객체 지향 방식으로 상태 기계를 구현하는 행위 소프트웨어 디자인 패턴이다. 상태 패턴을 이용하면 상태 패턴 인터페이스의 파생 클래스로서 각각의 상태를 구현함으로써, 또 패턴의 슈퍼클래스에 의해 정의되는 메소드를 호출하여 상태 변화를 구현함으로써 상태 기계를 구현한다. -> 객체가 하는 모든 동작을 교체한다. 마치 다른 클래스를 사용하는 것 같은 효과를 얻을 수 있다. 동작을 할 때, 변하지 않는 것은 그대로 두고 변하는 것을 다른 클래스로 분리하는 것이 핵심. 말로 설명하면 복잡하니, 코드를 보자. #include class Character { public: int state; void run() { if (state == 1) ..

Design Pattern 2023.05.19

flyweight pattern

flyweight pattern 정의 : 플라이웨이트 패턴는 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 소프트웨어 디자인 패턴이다. 핵심 : 속성이 동일한 객체는 공유 할 수 있도록 만들자. flyweight #include #include #include // 속성이 동일한 객체는 공유 할수 있게 하자. - Flyweight class Image { std::string image_url; public: Image(const std::string& url) : image_url(url) { std::cout

Design Pattern 2022.12.01

iterator pattern

iterator pattern 정의 : 객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴이다. 반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다. -> 서로 다른 자료구조들을 같은 방법으로 순회하고 싶다. #include int main() { std::List s = { 1,2,3,4,5 }; // 모든 요소가 떨어진 메모리 std::vector v = { 1,2,3,4,5 }; // 모든 요소가 연속된 메모리 } list는 보통 double linked list를 사용하여 구현되어있다 한다. 즉 요소 요소가 떨어져 있다. [ ←o→ ←o→ ←o→ ←o→ ] v..

Design Pattern 2022.11.20

Template Method

Template Method 정의 : 템플릿 메소드 패턴(template method pattern)은 소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.[1] 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다 전체 ㅡ 부분의 관계를 가지는 객체들 사이의 관계를 정의할 때 유용하다 핵심 : 변하는 코드와 변하지 않는 코드를 분리하라. 변하는 코드를 가상 함수를 통하여 분리한다 : template method 변하는 코드를 class 를 통하여 분리한다 : strategy pattern (C++) 변하는 코드를 class의 template을 통하여 분리한다 : Policy Based class Template Method 예제 코드 ..

Design Pattern 2022.09.06

Observer Pattern

엑셀을 사용할 때, 서로 연결된 표와 그래프를 생각해 보자. 표만 수정을 하면 그래프가 변화한다. 어떻게 구현할 수 있을까? 테이블을 만들고, 그 테이블에 여러가지 그래프들이 붙을 수 있게 한다. 그래프가 표를 관찰하고 있다가 변하면 본인도 변하게 한다. 관찰자 패턴이라 하지만... 개인적으로는 본인 밑에 달린 여러 클래스들에게 통보하는 느낌이 강하다. ITable / Igraph를 생성. graph를 table에 붙였다 땟다 할 수 있게 만들어 보자. #include #include class ITable; // class 전방선언 struct IGraph { virtual void Update() = 0; virtual ~IGraph() {} ITable* AttachedTable; }; class ..

Design Pattern 2022.08.14

Decorator pattern

Composite pattern과 같은 느낌. composite가 재귀적 포함을 사용한 복합 객체를 만들었다면, decorator는 재귀적 포함을 사용하여 객체에 기능을 추가한다. 얘를 들어, 게임을 하나 만든다고 하자. 나는 무기에 관한 것을 만들게 되었고, 각 무기에는 기본 데미지와 랜덤으로 붙을 수 있는 옵션들이 있다. 이런 느낌으로... 랜덤으로 잠재 옵션이 붙을 수 있게. 살짝 바꾸어서 잠재 옵션이 아닌 추가 데미지 옵션을 단다고 해보자. 일단 무기 클래스가 하나 있어야 할 것이다. 그 클래스에는 bonusDamage 옵션을 달 수 있게 할 것이고, 각각의 옵션을 class로 구현할 것이다. 기본 데미지를 주는 class를 만들어 두고, weapon class에서 damage를 얻을 수 있게 해..

Design Pattern 2022.07.26

Composite Pattern

- Structural Pattern. 폴더 / 파일 구조를 생각하여 코드를 짜 보자. - 폴더와 파일 class를 만들어야 한다. - 각각은 name을 가진다. - 폴더는 파일을 포함할 수 있다. - 파일은 각 사이즈를 가지고, 폴더는 각각의 사이즈를 가지진 않지만 본인 내부에 있는 파일 사이즈의 합을 내뿜는다. 해당 구조를 생각하여 간단하게 코드를 작성해 본다면 #include #include #include #include using namespace std; class File { private: string name; size_t size; public: File(const string& name, size_t size) : name(name), size(size) {} ~File() {} si..

Design Pattern 2022.05.18
반응형