이 포스트의 목적
- 싱글턴 패턴을 정책 기반(policy-based design)으로 디자인 하는 방법 정리를 위해
이 포스트의 준비물
- Firefox 4.0 b7
- g++ 4.3.2
- vim
- putty
참조 링크
- 단위 전략(전책 기반 : policy-based) 클래스 디자인 - 예전에 정리했던 건데 지금 보면, 알쏭달쏭
- http://en.wikipedia.org/wiki/Policy-based_design - 영문 위키, 번역하다가 밑에 코드만 보았다. :)
참조 서적
- 안드레 알렉산드레스쿠 저. Modern C++ Design. 이기형 역.
Addiston-Wesley. 인포북. 초판 2003.07.30. page(248 ~ 259)
내용
정책 기반(단위 전략 : policy-based) 디자인은 무엇인가?
- 여러개가 복잡하게 얽힌 개념을 분류화하고, 각 분류화된 개념을 조합할수 있게 만드는 디자인이다.(너무 추상적.. 코드를 보는게 좋다)
- Policy-based design, 또는 policy-based class design 또는 policy-based programming 이라고 불린다.
- 우리 나라 말로는 정책 기반, 단위 전략 등으로 되어 소개 되었다.
- C++ 프로그래밍 패러다임 중 하나이며, C++ 에선 이를 template 으로 지원한다.
- 2001년, 안드레 알렉산드레스쿠저 Modern C++ Design 에서 소개 되었다.
- 현재까지 잘 쓰이지 않는 프로그래밍 패러다임 이다. 선구자는 안드레 안렉산드레스쿠 이다.
- C++ 라이브러리를 만들 때, 무척 좋은 패러다임 이다.
정책 기반(단위 정략 : policy-based) 클래스를 만들 때, 우선 해야 하는 작업은 무엇인가?
- 만들고자 하는 기능을 모두 나열한다.
- 나열한 기능들을 유형에 맞게 분류하고, 각 유형별 사용 인터페이스를 만든다.
- 그리고 이 유형들을 다시 조합할 수 있는 틀을 만든다.
- 최종 결과물은 참조 링크에 있는 영문 위키를 보라.
싱글턴 패턴을 정책 기반(policy-based)으로 디자인 하는 방법
- 싱글턴 패턴에 들어간 개념들을 분류한다.
- 객체 생성 정책 : 객체 생성시, new, static, malloc 으로 생성할지 결정하는 모델
- 객체 생명주기 정책 : 객체 파괴가 없음 모델, C++ 기본 규칙 준수 모델, 피닉스 모델
- 쓰레드 정책 : 쓰레드 모델, 비 쓰레드 모델
- 분류한 정책들의 사용 인테페이스를 만든다.
- 각 정책을 조합할 수 있는 틀을 만든다.
맛보기 코드
설명
- 생성 정책
- 생성 인터페이스 T* create() 와 파괴 인터페이스 destroy(T *)가 있어야 한다.
- 생명주기 정책
- on_dead_reference() 인터페이스로 쭉정이 포인터가 발견될 경우, 정책에 따라 예외를 던지거나 무시한다.
- schedule_destruction(T *, atexit_pfn_t) 인터페이스로 생명의 끝날 시점을 결정한다.
여담
- singleton_holder 는 구현 보다 "무엇을 어떻게 분류해야 하는가?" 더 어렵다. (나는 현재까지 이것을 설명하는 방법은 모르며, 직관력에 의존하고 있다.)
- 여기에 thread model을 추가 해야 하는데, .. 졸려서 더는 못하겠다. 이 부분은 다음으로 넘긴다.
:wq
'책 정리 > Modern C++ Design' 카테고리의 다른 글
8장, 객체 팩토리(Object Factory) - 8.3 객체 팩토리 - 일반화 시키기 (0) | 2010.12.26 |
---|---|
8장, 객체 팩토리(Object Factory) - 8.2 객체 팩토리 리팩토링 (0) | 2010.12.25 |
8장, 객체 팩토리(Object Factory) - 8.1 객체 팩토리란 무엇인가? (0) | 2010.12.25 |
6장, 싱글턴(Singleton)의 구현 - 6.2 싱글턴 패턴을 정책 기반(policy-based) 클래스로 디자인하기 - 쓰레드 정책 추가 (1) | 2010.12.18 |
6장, 싱글턴(Singleton)의 구현 - 5. 싱글턴이 쓰레드를 만났을 경우 고려사항 (0) | 2010.12.05 |
6장, 싱글턴(Singleton)의 구현 - 4. 피닉스 싱글턴(phoenix singleton)의 구현과 그 한계점 (2) | 2010.12.04 |
6장, 싱글턴(Singleton)의 구현 - 3. 마이어스 싱글턴(Singleton)의 한계와 개선점 (0) | 2010.12.03 |
6장, 싱글턴(Singleton)의 구현 - 2. 싱글턴(Singleton)의 기초적인 구현 (0) | 2010.11.30 |
6장, 싱글턴(Singleton)의 구현 - 1. 싱글턴(Singleton)이란 무엇인가? (0) | 2010.11.30 |
5장, 일반화 함수자(함수 객체) - 7. 총평 (0) | 2010.11.28 |
최근댓글