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

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

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

출처: subtype_of_struct_class

본문

진단 메시지

The class '{0}' can't extend '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'.

클래스 '{0}'은(는) '{1}'이(가) 'Struct', 'Union', 또는 'AbiSpecificInteger'의 서브타입이기 때문에 '{1}'을(를) 상속(extend)할 수 없어요.

The class '{0}' can't implement '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'.

클래스 '{0}'은(는) '{1}'이(가) 'Struct', 'Union', 또는 'AbiSpecificInteger'의 서브타입이기 때문에 '{1}'을(를) 구현(implement)할 수 없어요.

The class '{0}' can't mix in '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'.

클래스 '{0}'은(는) '{1}'이(가) 'Struct', 'Union', 또는 'AbiSpecificInteger'의 서브타입이기 때문에 '{1}'을(를) 믹스인(mix in)할 수 없어요.

설명

분석기는 클래스가 StructUnion을 상속하는 클래스를 상속, 구현, 믹스인할 때 이 진단을 만들어 내요. 클래스는 StructUnion만 직접 상속할 수 있어요. FFI에 대한 자세한 내용은 dart:ffi를 이용한 C 상호 운용 문서를 참고해요.

예시

다음 코드는 클래스 CStruct를 상속하는 S를 상속하기 때문에 이 진단을 만들어 내요.

import 'dart:ffi';

final class S extends Struct {
  external Pointer f;
}

final class C extends S {
  external Pointer g;
}

일반적인 해결 방법

다른 struct나 union이 선언한 일부 필드를 공유하는 struct나 union을 정의하려는 거라면, StructUnion을 직접 상속하고 공유 필드를 복사해 주세요.

import 'dart:ffi';

final class S extends Struct {
  external Pointer f;
}

final class C extends Struct {
  external Pointer f;

  external Pointer g;
}

더 알아보기