실행 라이브러리에서 도달할 수 없는 멤버
실행 라이브러리에서 도달할 수 없는 멤버
실행 가능한(executable) 라이브러리 안에서 public으로 선언된 멤버가, 그 라이브러리의 진입점(entry point)에서 직간접적으로 참조되지 않을 때 이 진단이 발생해요. 어디서부터 호출되어야 하는지, 어떤 선언은 무시되는지 함께 살펴볼게요.
본문
설명
analyzer는 실행 가능한 라이브러리 안의 public 선언이 그 라이브러리의 진입점에서 직간접적으로 참조되지 않을 때 이 진단을 내보내요.
실행 가능한 라이브러리는 진입점을 포함하는 라이브러리를 말해요. 진입점은 다음 중 하나인 최상위(top-level) 함수예요.
- 이름이
main인 함수. @pragma('vm:entry-point')로 주석이 달린 함수.- Flutter의 위젯 미리보기 주석인
@Preview로 주석이 달린 함수.
analyzer는 package:meta의 @visibleForTesting이나 Flutter의 @Preview로 주석이 달린 선언에 대해서는 이 진단을 보고하지 않아요.
예시
다음 코드는 함수 f가 main 함수에서 참조되지 않기 때문에 진단이 발생해요.
void main() {}
void f() {}
다음 코드는 메서드 m이, 그것을 포함하는 클래스 C가 참조되더라도 참조되지 않기 때문에 진단이 발생해요.
void main() {
C();
}
class C {
void m() {}
}
일반적인 해결 방법
선언이 사용될 의도라면 빠진 참조를 추가해 줘요.
void main() {
f();
}
void f() {}
선언이 필요 없다면 그것을 제거해요.
void main() {}
선언이 public인 이유가 테스트에서 사용하기 위해서라면 @visibleForTesting 주석을 추가해 줘요.
import 'package:meta/meta.dart';
void main() {}
@visibleForTesting
void f() {}
더 알아보기
- 테스트를 위한 주석에 대한 내용은 package:meta의
visibleForTesting문서를 확인해 보세요.