지노윈 2019. 11. 3. 13:00
반응형

자신을 템플릿 인자로 하여 원하는 클래스들을 재조립하여 새로운 클래스 타입을 만들어요.

즉, 각각의 기능을 컴포넌트 처럼 구현하고 원하는 기능들을 조합하여 새로운 타입을 만들 수 있어요.

상속을 이용하면 원하지 않는 기능도 함께 포함되지만 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();
}