애너테이션은 const 변수 참조나 const 생성자 호출이어야 함
애너테이션은 const 변수 참조나 const 생성자 호출이어야 함 (invalid_annotation)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 invalid_annotation 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 간단히 말하면, 애너테이션(annotation)으로 const 변수 참조나 const 생성자 호출이 아닌 다른 것을 사용했을 때 분석기가 이 진단을 알려 줘요. 어떤 경우에 문제가 되는지 차근차근 살펴볼게요.
본문
진단 메시지
Annotation must be either a const variable reference or const constructor invocation.
애너테이션은 const 변수 참조이거나 const 생성자 호출이어야 해요.
설명
분석기는 애너테이션으로 const로 표시된 변수나 const 생성자의 호출이 아닌 다른 것을 사용하는 코드를 발견하면 이 진단을 만들어 내요. 특히 getter는 애너테이션으로 사용할 수 없어요.
예시
다음 코드는 변수 v가 const 변수가 아니기 때문에 이 진단을 만들어 내요.
var v = 0;
@v
void f() {}
다음 코드는 f가 변수가 아니기 때문에 이 진단을 만들어 내요.
@f
void f() {}
다음 코드는 f가 생성자가 아니기 때문에 이 진단을 만들어 내요.
@f()
void f() {}
다음 코드는 g가 getter이기 때문에 이 진단을 만들어 내요.
@g
int get g => 0;
일반적인 해결 방법
애너테이션이 const 생성자가 아닌 변수를 참조하고 있다면, 변수 선언에 const 키워드를 추가하면 돼요.
const v = 0;
@v
void f() {}
애너테이션이 변수를 참조하는 것이 아니라면, 애너테이션을 제거하면 돼요.
int v = 0;
void f() {}
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- 애너테이션을 어떻게 쓰는지 자세히 알고 싶다면 Metadata 문서를 참고해요.