Initializer List

하요·2024년 7월 5일
0
post-thumbnail

Dart에서 final 변수와 상위 클래스 생성자 초기화: Initializer List

객체 초기화는 Dart의 중요한 부분이며, 초기화 리스트는 생성자 본문이 실행되기 전에 필드를 초기화하는 데 매우 유용한 기능입니다. 이를 통해 final 변수, 상수, 그리고 상위 클래스의 생성자를 호출할 수 있습니다.

주요 활용도

  • final 변수 초기화: final 변수는 선언 후 변경할 수 없기 때문에, 생성자 본문이 실행되기 전에 초기화 리스트를 사용하여 초기화합니다. 이를 통해 final 변수를 안전하고 명확하게 설정할 수 있습니다.
  • 상위 클래스 생성자 호출: 상속 관계에서 초기화 리스트를 사용하여 상위 클래스의 생성자를 명확하게 호출합니다. 이를 통해 상위 클래스의 필드를 올바르게 초기화할 수 있습니다.
  • 복잡한 초기화 논리 수행: 필드를 초기화할 때 필요한 복잡한 계산이나 변환을 초기화 리스트에서 수행할 수 있습니다. 이는 생성자 본문을 간결하게 유지하면서 초기화 논리를 명확히 할 수 있게 합니다.

코드 예제

아래 예제는 final 변수를 초기화하고, 상위 클래스의 생성자를 호출하며, 초기화 리스트에서 추가적인 초기화 논리를 수행하는 방법을 보여줍니다.

final 변수 초기화

class Point {
  final int x;
  final int y;

  Point(int x, int y)
      : x = x,
        y = y;

  
  String toString() => 'Point($x, $y)';
}

void main() {
  Point p = Point(2, 3);
  print(p); // 출력: Point(2, 3)
}

상위 클래스 생성자 호출

class Person {
  final String name;

  Person(this.name);
}

class Employee extends Person {
  final String position;

  Employee(String name, this.position) : super(name);

  
  String toString() => 'Employee(name: $name, position: $position)';
}

void main() {
  Employee e = Employee('Alice', 'Developer');
  print(e); // 출력: Employee(name: Alice, position: Developer)
}

복잡한 초기화 논리 수행

class Circle {
  final double radius;
  final double area;

  Circle(double radius)
      : radius = radius,
        area = 3.14 * radius * radius;

  
  String toString() => 'Circle(radius: $radius, area: $area)';
}

void main() {
  Circle c = Circle(5);
  print(c); // 출력: Circle(radius: 5.0, area: 78.5)
}

추가 팁

  • 명확한 초기화 순서 유지: 초기화 리스트를 사용하면 생성자 본문이 실행되기 전에 모든 필드를 초기화할 수 있어 초기화 순서를 명확하게 유지할 수 있습니다.
  • 상속 관계에서 초기화 주의: 상속 관계에서 초기화 리스트를 사용하여 상위 클래스의 생성자를 명확하게 호출함으로써 상위 클래스의 필드를 올바르게 초기화합니다.

관련 자료

profile
flutter 개발자(진)

0개의 댓글