[TIL-032] Dart, Flutter Class에서 this가 안되는 이유

상황

위와 같이 메서드에서는 괜찮지만 멤버 변수에 this를 할당하면 에러가 발생하는 이유가 무엇일까?

 

이유

`this`는 class의 `인스턴스`를 참조한다.

아직 `인스턴스`가 생성되지 않은 상태로 멤버 변수에 `this`를 할당하여 초기화를 하니까 에러가 발생하는 것이다.

그리고 메서드는 인스턴스가 있어야만 호출이 가능하므로 `this`를 사용해도 상관이 없는 것이다.

 

해결 방법

`late`키워드를 사용하면 해결할 수 있다.

`late`는 해당 변수가 사용될 때 초기화가 진행되게 해주는 키워드이다.

즉, 인스턴스가 생성된 후에 해당 변수를 사용한다면 this를 사용할 수 있으므로 문제가 해결이 된다.

 

심화

late final animationController = AnimationController(
  vsync: this,
  duration: Duration(seconds: 1),
);

플러터에서 애니메이션을 사용할 때 `this`를 사용한다.

이때 `late`를 사용하는 이유가 바로 지금과 같은 상황 때문 인 것이다.