Dart 언어 오답노트 : 16. 초기화 리스트 vs 단순화된 생성자

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

여기 Idol1Idol2 두 가지 방식으로 아이돌 그룹을 나타내는 클래스가 있습니다.

Idol1 클래스: 초기화 리스트 사용

class Idol1 {
  final String name;
  final List<String> members;

  Idol1(String name, List<String> members)
      : this.name = name,
        this.members = members;
}
  • Idol1 클래스는 namemembers라는 두 개의 변수를 가지고 있습니다.
  • final이 붙어 있어서, 이 변수들은 한 번 값을 설정하면 바꿀 수 없습니다.
  • Idol1의 생성자에서는 초기화 리스트를 사용합니다. 이는 : 뒤에 오는 부분입니다.
  • this.name = name는 "넘겨 받은 name 값을 Idol1 클래스의 name 변수에 저장해라"라는 뜻입니다.
  • this.members = members도 마찬가지로, "넘겨 받은 members 값을 Idol1 클래스의 members 변수에 저장해라"라는 뜻입니다.
  • 초기화 리스트는 객체가 완전히 만들어지기 전에 실행됩니다.

Idol2 클래스: 단순화된 생성자

class Idol2 {
  final String name;
  final List<String> members;

  Idol2(this.name, this.members);
}
  • Idol2Idol1과 같이 namemembers 두 변수를 가지고 있습니다.
  • 여기서는 단순화된 생성자를 사용하여 변수를 초기화합니다.
  • Idol2(this.name, this.members)는 "넘겨 받은 namemembers 값을 각각 Idol2 클래스의 namemembers 변수에 저장해라"라는 뜻입니다.
  • 이 방식은 코드를 더 간결하게 만들어 줍니다.

두 클래스의 사용 예

void main() {
  Idol1 bts1 = Idol1("BTS", ["RM", "Jin", "Suga", "J-Hope", "Jimin", "V", "Jungkook"]);
  print(bts1.name);  // 출력: BTS
  print(bts1.members);  // 출력: [RM, Jin, Suga, J-Hope, Jimin, V, Jungkook]

  Idol2 bts2 = Idol2("BTS", ["RM", "Jin", "Suga", "J-Hope", "Jimin", "V", "Jungkook"]);
  print(bts2.name);  // 출력: BTS
  print(bts2.members);  // 출력: [RM, Jin, Suga, J-Hope, Jimin, V, Jungkook]
}
  • Idol1Idol2를 사용하여 BTS라는 아이돌 그룹 객체를 만들 수 있습니다.
  • 두 클래스 모두 동일한 결과를 출력합니다.

결론적으로, Idol1Idol2는 같은 정보를 저장하고, 같은 일을 하는 클래스입니다. 그러나 변수를 초기화하는 방식에서 차이가 있습니다. Idol2의 방식이 더 간결하지만, 둘 다 널리 사용됩니다.

profile
공부하는 개발자

0개의 댓글