초기화 리스트에 알아보기 전에 코드를 먼저 보는 게 좋겠다.
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은 생성자에서도 첫 할당을 할 수 없다는 것이다. 그래서 무조건 초기화 리스트를 사용해서 생성자에 들어가기 전에 할당을 해주어야 한다.
이유는 모르겠지만 추측할 수 있다.
아마 불변성을 중요시하는 플러터의 모토 때문일 것이다. 생성자 내에서 초기화하는 것보다 생성자 초기화 목록을 사용하여 초기화하는 것이 불변성을 강화할 수 있기 때문이다.