Object 외의 클래스를 상속한 클래스는 mixin으로 쓸 수 없어요
Object 외의 클래스를 상속한 클래스는 mixin으로 쓸 수 없어요
Dart에서 mixin으로 쓰려면 기본적으로 Object를 상속하는 클래스여야 해요. 그런데 Object가 아닌 다른 클래스를 상속받은 클래스는 mixin으로 사용할 수 없는데요, 이런 상황이 되면 analyzer가 바로 이 진단을 알려줘요.
본문
설명
analyzer는 Object가 아닌 다른 클래스를 상속받은 클래스가 mixin으로 사용될 때 이 진단을 만들어요. with 절에 들어갈 수 있는 클래스는 자기 자신이 상속하는 클래스가 Object여야 해요. 다른 클래스를 상속한 클래스를 mixin으로 섞으려고 하면 이 진단이 발생하는 거죠.
예시
아래 코드는 클래스 B가 A를 상속받고 있는데, 이 B를 C가 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 부분을 함께 보면 이해하기 좋아요.