본문 바로가기
반응형

디자인패턴12

[C++]Design Pattern - Decorator Pattern [문제점] 미사일을 발사하는 우주선이 있다. 가령 어떤 아이템을 획득하면 왼쪽 미사일이 추가되고, 다시금 아이템을 획득하면 오른쪽 미사일도 추가되는 이러한 기능을 만들어보자. #include using namespace std; class SpaceCraft { int color; int speed; public: void Fire() { cout 그러나 에러(RightMissile은 LeftMissile을 받을 수 없다. // --> 공통의 기반 클래스가 있어야 한다. (우주선과 기능추가 객체는 동일한 기반 클래스를 가져야 한다.) RightMissile rm(&lm2); rm.Fire(); return 0; } 그러나 이 경우에도 불편한 점이 있다. 모든 객체가 Component를 포함해야 하는 것이.. 2020. 12. 18.
[C++]Design Pattern - Composite Pattern Composite Pattern 객체들을 트리구조로 구성하여 부분과 전체를 나 나태는 계층구조로 만들 수 있다. 개별 객체와 복합객체를 구별하지 않고 동일한 방법 다룰 수 있다. 이러한 구조를 흔히 윈도우에서 우클릭을 하면 볼 수 있는 팝업 메뉴를 예로 구현해본다. 구성 : 선택했을때선택했을 때 하위 메뉴를 열어주는 메뉴(PopupMenu), 선택했을 때 어떤 일을 실행하는 메뉴(MenuItem) 설계 : 이 구성을 객체지향으로 설계하면 PopupMenu, MenuItem 클래스로 만들 텐데 PopupMenu에는 하위 항목으로 실행을 위한 MenuItem을 가질 수 있고, 또 다른 하위 메뉴로 PopupMenu를 가질 수도 있다. 이 둘을 모두 담기 위해서는 기반 클래스 BaseMenu가 있어야 하겠다... 2020. 12. 13.
[C++] 일반 함수에서의 가변성 [문제점] 다음과 같이 정렬을 수행하는 예제가 있다. Sort함수의 정책(오름차순 정렬, 내림차순 정렬)을 외부에서 결정할 수 있도록 고쳐보자. #include #include using namespace std; void Sort(int* x, int size) { for (int i = 0; i < size-1; i++) { for (int j = i+1 ; j< size; j++) { // 오름차순, 내림차순의 정책을 결정하는 코드 if( x[i] < x[j] ) { swap(x[i], x[j]); } } } } int main() { int x[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10}; Sort(x, 10); for(auto n : x) { cout 2020. 12. 11.
[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.
반응형