1. 소개

Dart가 Java나 C#같은 언어와 다르다고 느꼇던 부분이 다중상속을 지원하지 않는 것이다.

 

인터페이스는 지원하지만 각 클래스마다 내용을 구현해야하는 번거로움이 있을 것이다.

 

다음과 같이 부모클래스 이외에 다른 클래스의 메소드를 재사용 하고싶을때에는 어떻게 할까?

 

그림1. 상속관계 : 이걸 어떻게 구현할까?

 

그럴때 이 mixin 기능을 이용한다.

 

2. 언어적 표현

성기사를 한번 디자인 해보자.

Person 클래스를 구현하고, Person 클래스를 상속받은 Knight 클래스를 구현한다.

그리고 마지막으로 Knight를 상속받아 Holy knight를 구현한다.

기본적으로 OOP에서는 기본적으로 지원하는 선형적인 상속관계가 완성되었다.

그러나 재사용 가능성이 있는 Holy skills는 어떻게 구현하면 될까.

 

mixin대상이 될 (Holly skills) 클래스를 구현하고

이 클래스를 사용 할 (Holly Knight)클래스가 with 키워드로 mixin하면된다.

 

여기서 제한 사항이 하나 있는데 mixin의 대상이 될 클래스는 생성자를 선언하면 안된다는 것이다.

또한, 일반적인 방법으로 클래스를 사용하고 싶지않고 (인스턴스화 하거나 상속을 받게함)

mixin클래스로만 활용하고 싶다면 class 키워드 대신 mixin 키워드로 선언하자.

 

3. 구현

위의 내용을 구현한 코드는 아래와 같다.

 

abstract class Person{}

abstract class Knight extends Person{}

mixin HolySkills {
  void holySkill(){
  print('Holy Skill');
  }
}

class HolyKnight extends Knight with HolySkills{}

void main() {
  HolyKnight holyKnight = HolyKnight();
  holyKnight.holySkill();
}

+ Recent posts