Dart 언어 오답노트 : 15. 클래스의 생성자(중괄호 vs 콜론을 이용한 initializer list)

샤워실의 바보·2023년 10월 25일
0
post-thumbnail

Dart에서 클래스를 만들 때, 그 클래스의 객체가 생성될 때 어떻게 변수들을 초기화할지 결정해야 합니다. 여기에는 두 가지 주요한 방법이 있습니다.

1. 중괄호를 사용한 생성자:

이 방식은 생성자의 "본문"에서 변수를 초기화합니다. 즉, 객체가 만들어진 후에 변수에 값을 할당합니다.

class Player {
  late final String name;
  late final int xp;

  Player(String name, int xp) {
    this.name = name;
    this.xp = xp;
  }

  void sayHello() {
    print("Hi my name is ${name}");
  }
}

위 코드에서 late 키워드는 "이 변수는 나중에 초기화될 거야"라고 Dart에게 알려주는 역할을 합니다. final은 "한 번 값을 할당하면 그 값을 바꿀 수 없다"는 의미입니다. 그래서 late final은 "이 변수는 나중에 초기화될 거고, 한 번 초기화되면 그 값이 바뀌지 않는다"라는 의미가 됩니다.

2. 콜론을 사용한 생성자의 초기화 리스트:

이 방식은 객체가 만들어지기 전에 변수를 초기화합니다. 즉, 객체가 완전히 생성되기 전에 값을 할당합니다.

class Player {
  final String name;
  final int xp;

  Player(String name, int xp) :
    this.name = name,
    this.xp = xp;
  
  void sayHello() {
    print("Hi my name is ${name}");
  }
}

위 코드에서 생성자의 초기화 리스트를 사용하면 final 변수들을 초기화할 수 있습니다. this.namethis.xp는 객체의 namexp 변수에 각각 생성자로 받은 namexp 값을 할당합니다. 이렇게 하면 객체가 완전히 만들어지기 전에 final 변수들을 초기화할 수 있어서 late 키워드가 필요 없습니다.

요약하자면:

  • 중괄호를 사용한 생성자는 객체가 완전히 만들어진 후에 변수를 초기화합니다. final 변수를 초기화하려면 late 키워드를 사용해야 합니다.
  • 초기화 리스트를 사용한 생성자는 객체가 완전히 만들어지기 전에 변수를 초기화합니다. 그래서 final 변수도 초기화할 수 있고, late 키워드가 필요 없습니다.
profile
공부하는 개발자

0개의 댓글