Skip to main content

Dart의 메소드확장

Dart2.19.6Less than 1 minute

원문 : https://dart.dev/language/mixinsopen in new window

Mixin은 다수의 클래스 계층에서 클래스 코드를 재사용하는 방법입니다.

mixin을 사용하려면 with 키워드 뒤로 한개 이상의 mixin 이름을 나열합니다.
아래 예제는 두개의 클래스가 mixin을 사용하는 것 입니다.

class Musician extends Performer with Musical {
    // ...
}

class Maestro extends Person with Musical, Aggressive, Demented {
    Maestro(String maestroName) {
        name = maestroName;
        canConduct = true;
    }
}

mixin을 구현하기 위해 Object를 확장하고 생성자 선언이 없는 클래스를 생성합니다.
mixin을 일반 클래스로 사용하길 원하지 않는 이상 class 대신 mixin 키워드를 사용합니다.
예로 들면,

mixin Musical {
    bool canPlayPiano = false;
    bool canCompose = false;
    bool canConduct = false;

    void entertainMe() {
        if (canPlayPiano) {
            print('Playing piano');
        } else if (canConduct) {
            print('Waving hands');
        } else {
            print('Humming to self');
        }
    }
}

때로는 mixin을 사용할 유형을 제한할 경우도 있습니다.
예로 들어, mixin이 내부에 정의되지 않은 함수를 실행해야 할 때가 있습니다.
아래 예제에서 보여주듯, on 키워드를 사용하여 요구되는 상위클래스를 정의하여 mixin의 사용을 제한할 수 있습니다.

class Musician {
    // ...
}
mixin MusicalPerformer on Musician {
    // ...
}
class SingerDancer extends Musician with MusicalPerformer {
    // ...
}

이전 코드에서 Musician 클래스를 확장/구현한 클래스만 mixin MusicalPerformer를 사용할 수 있습니다.
SingerDancerMusician을 확장했기 떄문에 SingerDancerMusicalPerformer를 사용할 수 있습니다.