sealed 클래스를 서브타입으로 만들 수 없음
sealed 클래스를 서브타입으로 만들 수 없음 (subtype_of_sealed_class)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 subtype_of_sealed_class 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 다른 패키지에 있는 sealed 클래스를 상속·구현·믹스인할 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.
본문
진단 메시지
The class '{0}' shouldn't be extended, mixed in, or implemented because it's sealed.
클래스 '{0}'은(는) sealed이기 때문에 상속, 믹스인, 구현해서는 안 돼요.
설명
분석기는 sealed 클래스(meta 패키지의 sealed 어노테이션을 갖거나 sealed 클래스를 상속·믹스인한 클래스)가 그 클래스와 같은 패키지에 있지 않은 클래스나 믹스인 선언의 extends, implements, with 절에서 참조될 때 이 진단을 만들어 내요.
예시
분석 중인 패키지가 아닌 다른 패키지의 라이브러리에 다음 코드가 있다고 해볼게요.
import 'package:meta/meta.dart';
class A {}
@sealed
class B {}
다음 코드는 B와 같은 패키지에 있지 않은 C가 sealed 클래스 B를 상속하기 때문에 이 진단을 만들어 내요.
import 'package:a/a.dart';
class C extends B {}
일반적인 해결 방법
클래스가 sealed 클래스의 서브타입일 필요가 없다면, 서브타입이 아니도록 선언을 바꿔 주세요.
import 'package:a/a.dart';
class B extends A {}
클래스가 sealed 클래스의 서브타입이어야 한다면, sealed 클래스가 더 이상 sealed가 아니도록 바꾸거나, 서브클래스를 sealed 클래스와 같은 패키지로 옮겨 주세요.
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- sealed 클래스에 대한 자세한 내용은 Dart 공식 문서의 클래스 문서를 참고해요.
- meta 패키지의 sealed 어노테이션 문서도 함께 살펴보세요.