`internal` 어노테이션을 쓸 수 없는 대상

internal 어노테이션을 쓸 수 없는 대상

internal 어노테이션이 붙은 선언이 public 라이브러리에 있거나 private 이름을 가질 때 Dart analyzer가 만들어 내는 진단이에요. 패키지의 private API에 있는 public 요소만 internal로 표시할 수 있어요.

출처: invalid_internal_annotation

본문

이 진단은 internal 어노테이션이 붙은 선언이 public 라이브러리에 있거나 private 이름을 가질 때 발생해요.

여기서 public 라이브러리는 패키지의 lib 디렉터리에 있지만 lib/src 디렉터리 안에는 없는 라이브러리를 말해요.

아래 코드는 public 라이브러리에 있을 때 internal 어노테이션을 public 라이브러리의 선언에 적용할 수 없어서 이 진단을 만들어 내요.

import 'package:meta/meta.dart';

@internal
class C {}

아래 코드는 public 라이브러리든 internal 라이브러리든, internal 어노테이션을 private 이름을 가진 선언에 적용할 수 없어서 이 진단을 만들어 내요.

import 'package:meta/meta.dart';

@internal
class _C {}

고치는 방법

선언이 private 이름을 가진다면 어노테이션을 지워 주세요.

class _C {}

선언이 public 이름을 갖고 패키지 내부용으로 쓰려는 거라면, 어노테이션이 붙은 선언을 internal 라이브러리(즉 src 디렉터리 안의 라이브러리)로 옮겨 주세요. 아니라면 어노테이션 사용을 지워 주세요.

class C {}

더 알아보기

  • meta 패키지의 @internal 어노테이션
  • 패키지 레이아웃 (lib / lib/src 구조)