디자인 패턴, 싱글톤, 상태패턴
2015. 4. 15. 08:47ㆍ프로그래밍/Design Patterns
728x90
728x90
1. 디자인패턴 개요
본문 위키 : http://ko.wikipedia.org/wiki/디자인_패턴
소프트웨어 개발 방법에서 사용되는 디자인 패턴은, 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다. 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다.
이 용어를 소프트웨어 개발 영역에서 구체적으로 처음 제시한 곳은, GoF(Gang of Four)라 불리는 네명의 컴퓨터 과학 연구자들이 쓴 서적 'Design Patterns: Elements of Reusable Object-Oriented Software'(재이용 가능한 객체지향 소프트웨어의 요소 - 디자인 패턴)이다. GoF는 컴퓨터 소프트웨어 공학 분야의 연구자인 에릭 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스의 네명을 지칭한다.
2. 싱글톤 패턴
정의
해당 클래스의 인스턴스가 하나만 만들어진다.
어디서든지 그 인스턴스에 접근할 수 있도록 전역적으로 제공한다.
클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다.
장점
유일하게 존재하는 인스턴스의 접근을 통제한다.
전역변수처럼 인스턴스에 접근할 수 있으며 시스템의 자원을 효율적으로 사용할 수 있다.
인스턴스가 하나만 필요한 클래스일 때 무분별한 객체 생성을 막을 수 있다.
단점
일반적인 전역 변수의 단점과 비슷하다.(동시접근, 코드 변경시 여러 부분에 영향을 미침(의존도))
정확히 인스턴스가 생성되는 시점을 유추하기 어렵다.
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> class SingleTon { public: ~SingleTon(void); static SingleTon* getInstance(void) { static SingleTon inst; return &inst; } private: //< 생성자를 private으로 만들어 객체 생성을 제한한다. SingleTon(void); }; | cs |
3. 상태패턴
정의
객체 내부 상태에 따라 행위를 변경할 수 있는 패턴.
일련의 행동을 정의한 메소드지만 객체의 상태에 따라 다른 기능을 수행한다.
C++에선 오버라이딩을 통한 다형성을 이용하여 구현할 수 있다.
장점
서로 다른 상태에 대한 행동을 별도의 객체로 관리할 수 있다.
상태 전이를 명확하게 한다.
상태 객체를 공유할 수 있다.
단점
상태 패턴은 조건문과 분기문에 비해 명시적이지 않다.
객체 생성과 소멸 시점에 주의해야 한다.
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <iostream> using namespace std; //< 아이템 베이스 클래스 class Item { public : //< 아이템 사용 추상 클래스 virtual void use( void ) = 0; }; //< 포션 파생 클래스 class Potion : public Item { public : //< 오버라이딩 virtual void use(void) override { cout<<"물약 사용!"<<endl; } }; //< 장비 파생 클래스 class Equiq : public Item { public : //< 오버라이딩 virtual void use( void ) override { cout<<"장비 착용!"<<endl; } }; void main( void ) { //< 아이템 객체 생성 Item *state; Item *oldState; //< 포션 객체를 가리키고 use를 실행 state = new Potion; state->use(); oldState = state; //< 장비 객체를 가리키고 use를 실행 state = new Equiq; state->use(); //< 동적할당 해제 delete state; delete oldState; } | cs |
728x90
반응형
'프로그래밍 > Design Patterns' 카테고리의 다른 글
[Design Pattern] 싱글톤 (2) | 2016.02.15 |
---|---|
[Design Pattern] 팩토리 패턴 (2) | 2016.01.30 |
디자인 패턴 연관도 (1) | 2015.07.08 |
중재자 패턴 (2) | 2015.05.04 |
싱글톤 사용하기 (2) | 2015.04.21 |
[Design Pattern] 옵저버 패턴 개요 (0) | 2015.04.18 |