[Flutter] 초기화 리스트(initializer list) ':'

YJ KIM·2024년 4월 21일
post-thumbnail

초기화 리스트에 알아보기 전에 코드를 먼저 보는 게 좋겠다.

class Movie {
  final String title;
  final String keyword;
  final String poster;
  final bool like;

  Movie.fromMap(Map<String, dynamic> map)
      : title = map['title'],
        keyword = map['keyword'],
        poster = map['poster'],
        like = map['like'];
}

여기서 초기화 리스트를 발견할 수 있다.
Movie의 명명 생성자인 Movie.fromMap을 보면 : 괄호가 있고 형태가 보통 함수와는 다르다.

이는 초기화 리스트(initializer list)이다.
가장 중요한 개념으로는,

생성자의 실행 전에 필드를 초기화하고, 각 필드의 초기화는 쉼표로 구분된다.

가 있다.

😼: 근데 그냥 함수로 초기화하면 안되나;
라고 할 수 있다. 근데 안된다.

왜냐하면 final 키워드 때문이다.

[final 키워드]
final이란? 상수로서 런타임 내에 변수에 값이 할당되면 이를 변경할 수 없다.

java와는 다르게 생성자 내부에서 final 키워드가 붙은 변수에 값을 할당할 수 없다. final은 생성자에서도 첫 할당을 할 수 없다는 것이다. 그래서 무조건 초기화 리스트를 사용해서 생성자에 들어가기 전에 할당을 해주어야 한다.

이유는 모르겠지만 추측할 수 있다.
아마 불변성을 중요시하는 플러터의 모토 때문일 것이다. 생성자 내에서 초기화하는 것보다 생성자 초기화 목록을 사용하여 초기화하는 것이 불변성을 강화할 수 있기 때문이다.

profile
모르면 쓰지 말고 쓸 거면 알고 쓰자

0개의 댓글