NVI idiom
(non-virtual-interface idiom)
템플릿 메서드 패턴을 C++ 식으로 구현한 것이다.
간단한 패턴이니 예제를 통해 바로 보도록 하겠다.
가상 함수는 반드시 private 멤버로 두어야 한다는
가상함수 은폐론이 기초가 된 기법이다.
가상합수를 private으로 두면 이를 상속하는 클래스는
재정의는 할 수 있지만 실제 호출은 할 수없다.
호출을 하려면 hpValue() 라는 함수를 거쳐야 하는데
이것이 바로 NVI 관용구의 핵심이다.
여기서 hpValue()는 가상함수의 랩퍼라고 부른다.
hpValue()를 호출하게 되면 가상함수를 호출하기 전에
사전 동작이 가능하며 가상함수 호출 후 사후 동작도 가능하다.
또한 재정의가 가능하기 때문에 구현의 자유가 있지만
이 함수를 호출하는 시점은 기본 클래스의 고유권한으로 묶인다.
꼭 가상함수가 private여야 한다는 것은 아니지만
protected나 public멤버라면 NVI를 적용하는 의미가 없다.
'디자인 패턴' 카테고리의 다른 글
[C++ 디자인 패턴] 함수 포인터로 구현한 전략 패턴 (strategy pattern) (0) | 2017.02.18 |
---|---|
[C++ 디자인 패턴] Biulder 패턴 (빌더 패턴) (0) | 2017.01.18 |
[C++ 디자인 패턴] Abstract Factory (추상 팩토리 패턴) (0) | 2017.01.14 |
[C++ 디자인 패턴] Strategy 패턴 (전략 패턴) (0) | 2017.01.13 |
[C++ 디자인 패턴] pimpl idiom (pimpl 관용구) (0) | 2017.01.12 |