선언되기 전에 지역 변수를 참조했어요

선언되기 전에 지역 변수를 참조했어요 (referenced_before_declaration)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 referenced_before_declaration 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 변수가 선언되기 전에 참조될 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.

출처: referenced_before_declaration

본문

진단 메시지

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);
}

더 알아보기