top_level_cycle 진단: 최상위 변수의 타입이 자기 자신과 순환할 때

top_level_cycle 진단: 최상위 변수의 타입이 자기 자신과 순환할 때

분석기가 내보내는 진단에는 이름이 있어요. top_level_cycle최상위 변수에 타입 애너테이션이 없고, 그 변수의 초기화 표현식이 직접적으로든 간접적으로든 그 변수 자신을 가리킬 때 Dart 분석기가 알려주는 진단이에요. 서로를 참조하는 변수들 사이에서 타입을 추론할 수 없을 때 발생해요.

출처: top_level_cycle 진단

본문

설명

분석기는 최상위 변수에 타입 애너테이션이 없고, 그 변수의 초기화 표현식이 직접적으로든 간접적으로든 그 변수 자신을 가리킬 때 이 진단을 만들어요.

예시

다음 코드는 변수 xy가 서로를 기준으로 정의되고 어느 쪽에도 명시적인 타입이 없어서 서로의 타입을 추론할 수 없기 때문에 이 진단을 만들어요.

var x = y;
var y = x;

흔한 해결 방법

두 변수가 서로를 참조할 필요가 없다면, 순환을 끊어요.

var x = 0;
var y = x;

두 변수가 서로를 참조해야 한다면, 적어도 하나에는 명시적인 타입을 붙여요.

int x = y;
var y = x;

다만 주의할 점이 있어요. 이 코드는 진단을 만들어내지는 않지만, 순환에 있는 변수 중 하나라도 다른 변수에 의존하지 않는 값을 받기 전에 변수를 참조하면 런타임에서 스택 오버플로(stack overflow)가 발생해요.

더 알아보기