정적 메서드에서 인스턴스 멤버에 접근할 수 없음
정적 메서드에서 인스턴스 멤버에 접근할 수 없음 (instance_member_access_from_static)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 instance_member_access_from_static 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 쉽게 말하면, 정적(static) 메서드 안에서 인스턴스 멤버를 한정 없이(unqualified) 참조했을 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 문제가 되는지 차근차근 살펴볼게요.
본문
진단 메시지
Instance members can't be accessed from a static method.
인스턴스 멤버는 정적 메서드에서 접근할 수 없어요.
설명
분석기는 정적 메서드 안에서 인스턴스 멤버에 대한 한정 없는 참조가 발견되면 이 진단을 만들어 내요. 정적 메서드는 클래스 자체에 속하지 인스턴스에 속하지 않아서, this나 특정한 객체 없이는 어떤 인스턴스의 멤버를 가리키는지 알 수 없기 때문이에요.
예시
다음 코드는 정적 메서드 안에서 인스턴스 필드 x를 참조하고 있기 때문에 이 진단을 만들어 내요.
class C {
int x = 0;
static int m() {
return x;
}
}
일반적인 해결 방법
메서드가 인스턴스 멤버를 꼭 참조해야 한다면, 정적 메서드로 둘 수 없어요. 이때는 static 키워드를 제거하면 돼요.
class C {
int x = 0;
int m() {
return x;
}
}
메서드를 인스턴스 메서드로 만들 수 없다면, 파라미터를 추가해서 클래스의 인스턴스를 넘겨받는 방법도 있어요.
class C {
int x = 0;
static int m(C c) {
return c.x;
}
}
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- 클래스 멤버와
static의 동작을 더 자세히 보고 싶다면 Classes 문서를 참고해요.