이 포스트의 목적

  • 싱글턴 패턴을 정책 기반(policy-based design)으로 디자인 하는 방법 정리를 위해

이 포스트의 준비물

  • Firefox 4.0 b7
  • g++ 4.3.2
  • vim
  • putty

참조 링크

참조 서적

  • 안드레 알렉산드레스쿠 저. 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) 클래스를 만들 때, 우선 해야 하는 작업은 무엇인가?

  1. 만들고자 하는 기능을 모두 나열한다.
  2. 나열한 기능들을 유형에 맞게 분류하고, 각 유형별 사용 인터페이스를 만든다.
  3. 그리고 이 유형들을 다시 조합할 수 있는 틀을 만든다.

  4. 최종 결과물은 참조 링크에 있는 영문 위키를 보라.

싱글턴 패턴을 정책 기반(policy-based)으로 디자인 하는 방법

  1. 싱글턴 패턴에 들어간 개념들을 분류한다.
    - 객체 생성 정책 : 객체 생성시, new, static, malloc 으로 생성할지 결정하는 모델

    - 객체 생명주기 정책 : 객체 파괴가 없음 모델, C++ 기본 규칙 준수 모델, 피닉스 모델

    - 쓰레드 정책 : 쓰레드 모델, 비 쓰레드 모델

  2. 분류한 정책들의 사용 인테페이스를 만든다.

  3. 각 정책을 조합할 수 있는 틀을 만든다.

맛보기 코드

설명

  • 생성 정책
    - 생성 인터페이스 T* create() 와 파괴 인터페이스 destroy(T *)가 있어야 한다.

  • 생명주기 정책
    - on_dead_reference() 인터페이스로 쭉정이 포인터가 발견될 경우, 정책에 따라 예외를 던지거나 무시한다.
    - schedule_destruction(T *, atexit_pfn_t) 인터페이스로 생명의 끝날 시점을 결정한다.

여담

  • singleton_holder 는 구현 보다 "무엇을 어떻게 분류해야 하는가?" 더 어렵다. (나는 현재까지 이것을 설명하는 방법은 모르며, 직관력에 의존하고 있다.)

  • 여기에 thread model을 추가 해야 하는데, .. 졸려서 더는 못하겠다. 이 부분은 다음으로 넘긴다.

:wq

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기