선언되기 전에 지역 변수를 참조했어요
선언되기 전에 지역 변수를 참조했어요 (referenced_before_declaration)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 referenced_before_declaration 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 변수가 선언되기 전에 참조될 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.
본문
진단 메시지
Local variable '{0}' can't be referenced before it is declared.
지역 변수 '{0}'은(는) 선언되기 전에는 참조할 수 없어요.
설명
분석기는 변수가 선언되기 전에 참조될 때 이 진단을 만들어 내요. Dart에서는 변수가 선언된 블록 안 어디에서나 그 변수를 볼 수는 있지만, 실제로 참조할 수 있는 건 선언된 이후부터예요.
분석기는 선언이 어디에 있는지를 알려 주는 컨텍스트 메시지(context message)도 함께 만들어 내요.
예시
다음 코드는 i가 선언되기 전에 사용되기 때문에 이 진단을 만들어 내요.
void f() {
print(i);
int i = 5;
}
일반적인 해결 방법
지역 변수를 참조하려던 거였다면, 선언을 첫 번째 참조보다 앞으로 옮겨 주세요.
void f() {
int i = 5;
print(i);
}
바깥 스코프(outer scope)에 있는 이름, 예를 들어 파라미터, 인스턴스 필드, 또는 최상위(top-level) 변수를 참조하려던 거였다면, 지역 선언의 이름을 바꿔서 바깥 변수를 가리지 않게 해 주세요.
void f(int i) {
print(i);
int x = 5;
print(x);
}
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- 변수의 스코프(scope)에 대한 자세한 내용은 Dart 공식 문서의 변수 문서를 참고해요.