정적 메서드에서 인스턴스 멤버에 접근할 수 없음

정적 메서드에서 인스턴스 멤버에 접근할 수 없음 (instance_member_access_from_static)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 instance_member_access_from_static 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 쉽게 말하면, 정적(static) 메서드 안에서 인스턴스 멤버를 한정 없이(unqualified) 참조했을 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 문제가 되는지 차근차근 살펴볼게요.

출처: instance_member_access_from_static

본문

진단 메시지

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 문서를 참고해요.