Object 외의 클래스를 상속한 클래스는 mixin으로 쓸 수 없어요

Object 외의 클래스를 상속한 클래스는 mixin으로 쓸 수 없어요

Dart에서 mixin으로 쓰려면 기본적으로 Object를 상속하는 클래스여야 해요. 그런데 Object가 아닌 다른 클래스를 상속받은 클래스는 mixin으로 사용할 수 없는데요, 이런 상황이 되면 analyzer가 바로 이 진단을 알려줘요.

출처: mixin_inherits_from_not_object

본문

설명

analyzer는 Object가 아닌 다른 클래스를 상속받은 클래스가 mixin으로 사용될 때 이 진단을 만들어요. with 절에 들어갈 수 있는 클래스는 자기 자신이 상속하는 클래스가 Object여야 해요. 다른 클래스를 상속한 클래스를 mixin으로 섞으려고 하면 이 진단이 발생하는 거죠.

예시

아래 코드는 클래스 BA를 상속받고 있는데, 이 BC가 mixin으로 사용하고 있어서 진단이 발생해요.

//@dart=2.19
class A {}

class B extends A {}

class C with B {}

해결 방법

mixin으로 사용하려는 클래스를 Object를 상속하도록 바꿀 수 있다면 그렇게 바꾸면 돼요.

//@dart=2.19
class A {}

class B {}

class C with B {}

클래스 자체를 바꿀 수 없고, 이 클래스를 사용하는 쪽이 Object를 상속한다면 그 클래스가 mixin으로 쓰던 클래스를 상속하도록 바꾸는 방법도 있어요.

class A {}

class B extends A {}

class C extends B {}

클래스가 Object를 상속하지 않거나, B의 동작을 여러 곳에서 mixin으로 넣고 싶다면 진짜 mixin을 만들어 쓰는 게 좋아요.

class A {}

mixin M on A {}

class B extends A with M {}

class C extends A with M {}

더 알아보기

  • 어떤 클래스가 mixin으로 쓸 수 있는지, mixin을 어떻게 정의하고 사용하는지는 Dart 언어 문서의 mixin 부분을 함께 보면 이해하기 좋아요.