late 키워드의 사용 이유

샤워실의 바보·2024년 2월 28일
0
post-thumbnail

Dart에서 late 키워드는 변수가 선언된 후에 언젠가는 초기화될 것이라는 것을 Dart 컴파일러에게 알려주는 역할을 합니다. 특히, null safety 기능과 함께 사용될 때 이는 매우 유용한데, 변수가 사용되기 전까지는 null이 아닌 값을 가지게 될 것이라는 것을 보장하기 때문입니다.

여기에 간단한 예제를 들어서 설명해보겠습니다.

class MyClass {
  late String text;

  void loadText() {
    // 상상해보세요, 여기서 비동기 함수를 호출해서 데이터를 가져온다고 합니다.
    // 데이터를 받아온 후에 text 변수를 초기화합니다.
    text = "Hello, World!";
  }
}

위 예제에서 text 변수는 late 키워드를 사용하여 선언되었습니다. 이는 MyClass의 인스턴스가 생성될 때 text가 바로 초기화되지 않고, loadText 함수가 호출되어 실제 데이터를 받아온 후에 초기화될 것임을 의미합니다.

이제 본문에서 언급된 DetailScreen 위젯의 코드를 다시 살펴보며 설명하겠습니다.

class DetailScreen extends StatefulWidget {
  // 위젯의 생성자와 상태 클래스 선언은 동일하므로 생략합니다.
}

class _DetailScreenState extends State<DetailScreen> {
  // 여기서 late 키워드를 사용하여 변수를 선언합니다.
  late Future<WebtoonDetailModel> webtoon;
  late Future<List<WebtoonEpisodeModel>> episodes;

  
  void initState() {
    super.initState();
    // initState 메서드 내에서 API 호출을 통해 webtoon과 episodes를 초기화합니다.
    webtoon = ApiService.getToonById(widget.id);
    episodes = ApiService.getLatestEpisodesById(widget.id);
  }

  // build 메서드와 위젯의 UI는 동일하므로 생략합니다.
}

위 코드에서 webtoonepisodesinitState 메서드가 호출될 때, 즉 위젯이 초기화될 때까지 초기화를 지연시킵니다. 이는 데이터를 비동기적으로 가져와야 하는 경우 매우 유용한데, 이를 통해 위젯의 생성자에서 비동기 작업을 수행하는 것을 피하면서도, 필요한 데이터가 준비될 때까지 변수의 초기화를 안전하게 지연시킬 수 있습니다.

late 키워드 덕분에, Dart 컴파일러는 webtoonepisodes가 실제로 사용되기 전에 반드시 초기화될 것이라는 것을 알 수 있으며, 이로 인해 null safety를 위반하지 않습니다. 만약 late를 사용하지 않고 null을 허용하는 타입(Future<WebtoonDetailModel>? 또는 Future<List<WebtoonEpisodeModel>>?)으로 변수를 선언했다면, 매번 변수를 사용할 때마다 null 체크를 해야 하는 번거로움이 있을 것입니다.

profile
공부하는 개발자

0개의 댓글