sealed 클래스를 서브타입으로 만들 수 없음

sealed 클래스를 서브타입으로 만들 수 없음 (subtype_of_sealed_class)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 subtype_of_sealed_class 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 다른 패키지에 있는 sealed 클래스를 상속·구현·믹스인할 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.

출처: subtype_of_sealed_class

본문

진단 메시지

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 클래스와 같은 패키지로 옮겨 주세요.

더 알아보기