Dev

Design Patterns/Structural Patterns

Decorator Pattern (C++)

Decorator Pattern (C++) 목적 상황과 용도에 맞게객체에 동적으로 새로운 책임을 추가할 수 있다. OCP를 잘 나타내는 패턴으로 기능 확장이 필요할 때 기존 코드 수정 없이 확장이 가능한 구조이다. 그러나 단점으로는 데코레이터가 증가할 수록 작은 규모의 객체들이 많이 생기게 된다. 사용 시나리오 위젯을 그리는(Draw)하는 프로그램을 만든다고 가정한다. 여러가지 위젯중 캘린더 위젯을 만들고 위젯은 Scroller, Boarder로 구성할 수 있다. [Component] 동적으로 추가할 객체들의 인터페이스 역할을 한다. class WidgetComponent { public: virtual void Draw() = 0; }; [ConcreteComponent] 제공할 서비스의 베이스가 되..

Design Patterns/Behavioral Patterns

Strategy Pattern (C++)

Strategy Pattern (C++) 목적 동일 계열의 알고르즘군을 묶어서 인터페이스를 통해 제공하고 클라이언트 입장에서 이를 상호교환이 가능하도록 만든다. 상황에 맞게 유연하게 알고리즘 교체를 목적으로 한다. 사용 시나리오 리눅스에서 여러 I/O 스케줄링 방법이 존재한다. (알고리즘 군이 될 FIFO, Round Robin, Shortest Remaining Time 예제에서는 세개만 사용) 오너 사용자가 스케줄링 방법을 변경할 수 있도록 시스템을 만든다. [Strategy] 인터페이스 역할을 하는 Base strategy를 정의한다. class Scheduler { public: virtual void doSchedule() = 0; }; [ConcreteStrategy] Base strategy..

Design Patterns/Structural Patterns

Composite Pattern (C++)

Composite Pattern(복합체 패턴) 목적 부분과 전체의 계층을 표현하기 위해 객체들을 하나의 인터페이스(Component)로 묶어 트리 구조로 구조화 한다. 사용 시나리오 1. 루트(/) 디렉토리는 여러 파일과 폴더를 포함하고 있다. 2. 폴더도 여러 파일과 폴더를 포함하고 있다. [Component] 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의. Leaf와 Composite 클래스를 트리화 하기 위한 추상 클래스 class Component { public: Component(string componentName) { this->componentName = componentName; } virtual ~Component(){ } virtual void ShowName() const..

Design Patterns/Behavioral Patterns

Observer Pattern (C++)

Observer Pattern (감시자 패턴)목적어떤 객체의 상태가 변할 때 그 객체의 변화를 통지받기(Notify)를 원하는 다른 객체들이(옵저버) 그 변화를 통지받을 수 있도록 한다.통지는 각각의 옵저버들이 변화된 객체로부터 콜백(callback)을 받는다. 사용 시나리오1. 시간정보를 가지고 있는 클래스가 있다.2. 디지털 시계 위젯과 아날로그 시계 위젯이 시간정보 객체로부터 시간의 변할때마다 통지를 받고싶다.3. 시간이 변할 때마다 시간정보 클래스에서 옵저버객체들에게 변화를 알린다. [Subject]시간 정보를 가지고 있는 클래스이며 옵저버의 등록을 받아 옵저버를 리스트로 저장해 두었다가 시간이 변할 때 알려 준다. class ClockTimer { public: void RegisterObser..

Design Patterns/Structural Patterns

Adapter Pattern (C++)

Adapter Pattern (적응자 패턴)목적기존의 라이브러리나 프레임워크 또는 프로젝트 내에서 공통적으로 사용하여 코드 수정이 쉽지 않은 class등을 수정하지 않고 내가 원하는 기능을 추가할 수 있도록 변환(adapt) 시킨다. 사용 시나리오 1. 시스템에서 블루투스, WIFI를 키고 끌수 있는 프레임워크를 제공한다. 2. 개발하는 앱에서 블루투스,WIFI를 키고 끄는 기능을 제공하며 킬 때, 끌 때 로그를 저장하는 기능을 제공한다. [Adaptee]블루투스,WIFI 프레임워크가 adaptee가 된다. 활성화와 비활성화 기능을 제공한다. class BluetoothFW { public: static void ActivateBT() { cout

Design Patterns/Structural Patterns

Structural Pattern (구조패턴)

구조 패턴에는 다음과 같이 7가지의 패턴이 있다.AdapterBridgeCompositeDecoratorFacadeFlyweightProxy구조패턴의 목적은 프로그램 내의 효율적인 구조를 형성하기 위해 클래스와 객체를 어떻게 합성하는가에 관련된 패턴이다.클래스를 기반으로 구조화 한다면(Adapter패턴) 상속을 사용하고 객체를 기반으로 구조화 할때는(나머지 모든 패턴) 객체 복합을 통해 구조화 한다.

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..

C and C++

[C++] 복사 생성자와 복사 대입연산자의 차이점

class를 설계할 때 객체의 복사를 허용한다면, C++ 에서 객체를 복사하는 방법은 두가지가 있다. 1. 객체 생성시 복사 생성자를 이용하는 복사2. 복사 대입연산자를 이용하는 복사 두가지 방법의 미묘한 차이점이 존재하는데.코드를 통해 결론부터 말하면 다음의 예는 복사 생성자 Person p1(10, "ted");Person p2(p1); 또는Person p1(10, "ted"); Person p2 = p1; 다음의 예는 복사 대입 연산자이다. Person p1(10, "ted");Person p2(22, "Kong");p2 = p1; 복사 생성자의 두번째 예제와 복사 대입 연산자의 예제의 미묘한 차이점이 존재한다. 생성시기에 대입연산자 "="를 이용해서 대입을 하면 복사 생성자가 호출이 되고 생성후 ..

C and C++

[C++] new 연산자 예외처리

얼마전까지 c++로 개발 할 때 new연산에 대한 예외처리는 생각해보지 않고 개발했었다. 내공이 매우 부족하여 막연하게 프로그램 내에서 설마 new를 할 때 예외가 발생하겠어? 라는 생각을 가지고 있었다. 그러나 실무에서는 비일비재 한 일이였다. c++에서 new연산자에 대한 예외처리는 세가지이다. 1. try catch를 통한 예외 처리 try {int *arr = new int[100000000];}catch (std::bad_alloc &exception) {cout

Design Patterns/Creational Patterns

Abstract Factory Pattern (C++)

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

개발새발
'분류 전체보기' 카테고리의 글 목록 (11 Page)