지연 로딩 클래스를 서브타입으로 만들 수 없음
지연 로딩 클래스를 서브타입으로 만들 수 없음 (subtype_of_deferred_class)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 subtype_of_deferred_class 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 지연 import(deferred import)로 불러온 라이브러리의 클래스를 서브타입으로 사용할 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.
본문
진단 메시지
Classes and mixins can't implement deferred classes.
지연 로딩되는 클래스는 클래스나 믹스인이 구현(implement)할 수 없어요.
Classes can't extend deferred classes.
지연 로딩되는 클래스는 상속(extend)할 수 없어요.
Classes can't mixin deferred classes.
지연 로딩되는 클래스는 믹스인(mixin)할 수 없어요.
설명
분석기는 어떤 타입(클래스나 믹스인)이 지연 import로 불러온 라이브러리의 클래스의 서브타입일 때 이 진단을 만들어 내요. 타입의 슈퍼타입은 그 타입과 동시에 컴파일되어야 하는데, 지연 라이브러리에 있는 클래스는 라이브러리가 로드될 때까지 컴파일되지 않기 때문이에요. 자세한 내용은 지연 로딩 라이브러리 문서를 참고해요.
예시
클래스 A를 정의하는 a.dart 파일이 있다고 해볼게요.
class A {}
다음 코드는 B의 슈퍼클래스가 지연 라이브러리에 선언되어 있기 때문에 이 진단을 만들어 내요.
import 'a.dart' deferred as a;
class B extends a.A {}
일반적인 해결 방법
지연 라이브러리에 있는 타입의 서브타입을 만들어야 한다면, deferred 키워드를 제거해 주세요.
import 'a.dart' as a;
class B extends a.A {}
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- 지연 로딩에 대한 자세한 내용은 Dart 공식 문서의 지연 라이브러리 로딩 문서를 참고해요.