반응형 C++11 [C++]Design Pattern - Application Framework 흔히 객체지향 프로그래밍이라 함은 쉽게 생각해 본다면 모든 것을 객체로 만드는 것이라고 할 수 있겠다. 그러나 C++은 태생적으로 main이 일반 함수이기 때문에 모든 것을 객체로 만들 수가 없다. GUI, 스마트폰 앱, 게임과 같이 특정 분야의 애플리케이션들은 전체적인 흐름이 항상 유사하다. 이런 전체적인 흐름이 유사한 애플리케이션에서는 이를 위해 main함수 안에서 전반적인 흐름을 담아 라이브러리 내부에 감추는 기법을 사용한다. #include using namespace std; class CWinApp; // 클래스 전방선언 CWinApp* g_app = 0; class CWinApp { public: CWinApp() { g_app = this; } virtual bool InitInstance.. 2020. 12. 7. [C++] Design Pattern - Policy Base Design [문제점] 아래의 코드에서 List s 가 멀티스래드에 안전하지 않다고 가정한다. 동기화를 위해서 Lock/Unlock의 구현이 필요하다. 그런데 사용자에 따라 List에 내장된 Lock/Unlock을 원치 않을 수도 있다. 불필요한 Lock/Unlock의 경우 성능 저하가 발생할 수도 있기 때문이다. 그러므로 Lock/Unlock은 사용자가 포함시킬 것인지 포함시키지 않을 것인지 선택 할 수 있어야 하겠다. 1. 변하는 것과 변하지 않는 것을 분리한다. * 변하는 것을 가상함수화하는 방법 -> Template Method * 변하는 것을 별도의 클래스로 구현하는 방법 -> Strategy Pattern 2. Strategy pattern을 이용해서 Lock/Unlock을 구현해보자. #include u.. 2020. 12. 5. [C++] Design Pattern - Template Method 기법 Template method 기법 - 모든 도형에 공통적으로 변하지 않는 전체적인 흐름을 기반 클래스에서 제공하고 - 각 도형 별로 변해야 하는 부분을 가상 함수로 제공해서 파생 클래스가 재정의 할 수 있게 한다. #include #include using namespace std; class Shape { public: // [문제] 가상의 멀티스래드 세이프에 대한 고려 virtual void Draw() final { // 변하는 것을 가상함수로 뽑아낸다. // -> Lock, Unlock 은 변화하지 않는 코드 // -> 실재 그리기 로직만 변화가 있는 코드이다. -> 이것을 함수로 빼냄 -> DrawImp() cout private 또는 protected virtual Shape* Clone() .. 2020. 11. 25. [C++] 예제로 배우는 객체 지향(Prototype Pattern) Copy & Paste 기능 추가하기 타입코드를 사용하는 방법 새로운 도형이 추가되면 기존 코드가 수정(추가)된다. OCP를 만족하지 못한다. 가상함수를 사용하는 방법 새로운 도형이 추가 되어도 기존 코드가 수정되지 않는다. OCP를 만족한다. "Prototype"이라 불리는 디자인 패턴 // Exmaples.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다. // #include #include using namespace std; class Shape { public: int type; virtual void Draw() { cout 가상함수를 사용하는 방법 /*switch (v[k]->type) { case 1: case 2: case 3: break.. 2020. 11. 25. 이전 1 2 3 다음 반응형