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

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

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

출처: subtype_of_ffi_class

본문

진단 메시지

The class '{0}' can't extend '{1}'.

클래스 '{0}'은(는) '{1}'을(를) 상속(extend)할 수 없어요.

The class '{0}' can't implement '{1}'.

클래스 '{0}'은(는) '{1}'을(를) 구현(implement)할 수 없어요.

The class '{0}' can't mix in '{1}'.

클래스 '{0}'은(는) '{1}'을(를) 믹스인(mix in)할 수 없어요.

설명

분석기는 클래스가 StructUnion이 아닌 다른 FFI 클래스를 상속하거나, 어떤 FFI 클래스든 구현하거나 믹스인할 때 이 진단을 만들어 내요. StructUnion은 서브타입으로 만들 수 있는 유일한 FFI 클래스이며, 그것조차 상속으로만 만들 수 있어요. FFI에 대한 자세한 내용은 dart:ffi를 이용한 C 상호 운용 문서를 참고해요.

예시

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

import 'dart:ffi';

final class C extends Double {}

일반적인 해결 방법

클래스가 StructUnion을 상속해야 한다면, 클래스 선언을 바꿔 주세요.

import 'dart:ffi';

final class C extends Struct {
  @Int32()
  external int i;
}

클래스가 StructUnion을 상속할 필요가 없다면, FFI 클래스에 대한 참조를 모두 제거해 주세요.

final class C {}

더 알아보기