반응형
자신을 템플릿 인자로 하여 원하는 클래스들을 재조립하여 새로운 클래스 타입을 만들어요.
즉, 각각의 기능을 컴포넌트 처럼 구현하고 원하는 기능들을 조합하여 새로운 타입을 만들 수 있어요.
상속을 이용하면 원하지 않는 기능도 함께 포함되지만 Mixin을 이용하면 재활용성 높고 깔끔한 구조로 구현할 수 있어요.
아래의 예제 코드를 살표 보면 무슨 말인지 이해가 될거예요.
Mixin으로 재조립하여 새로운 AnimatedWindow, ScrollableWindow, PerfectWindow라는 새로운 타입을 만들어서 사용하고 있어요.
struct Window
{
...
};
template<class Base> struct Animated : public Base
{
void Play() {};
};
template<class Base> struct Scrollable : public Base
{
void ScrollUp() {};
void ScrollDown() {};
};
template<class Base> struct Dockable: public Base
{
void Dock() {};
void Undock() {};
};
using AnimatedWindow = Animated<Window>;
using ScrollableWindow = Scrollable<Window>;
using PerfectWindow = Dockable<Scrollable<Animated<Window>>>;
int main()
{
AnimatedWindow aw;
aw.Play();
PerfectWindow pw;
pw.Dock();
pw.ScrollUp();
pw.Play();
}
'프로그래밍 일반 > 객체 지향' 카테고리의 다른 글
Boost.DI 소개 (0) | 2019.11.10 |
---|---|
SOLID 디자인 원칙 (0) | 2019.11.03 |
이상한 재귀 템플릿 패턴(Curiously Recurring Template Pattern, CRTP) (0) | 2019.10.27 |
구상(Concrete) 클래스, 추상(Abstract) 클래스 (1) | 2019.10.27 |
디자인 패턴 개요 (0) | 2019.10.27 |