반응형

Flutter에서 클래스의 생성자는 객체를 초기화하는 방법입니다. Dart 언어에서는 여러 가지 생성자 방식을 제공하여 다양한 초기화 시나리오를 처리할 수 있습니다. 주요 생성자 유형은 다음과 같습니다:

기본 생성자 (Default Constructor)

기본 생성자는 클래스 이름과 동일한 이름을 가집니다. 기본 생성자는 인수가 없거나 인수를 가질 수 있습니다.

class MyClass {
  int value;

  // 기본 생성자
  MyClass() {
    value = 0;
  }
}

명명된 생성자 (Named Constructor)

명명된 생성자는 클래스의 여러 생성자를 정의할 때 사용됩니다. 명명된 생성자는 클래스 이름 뒤에 점(.)을 찍고 이름을 붙입니다.

class MyClass {
  int value;

  // 기본 생성자
  MyClass() {
    value = 0;
  }

  // 명명된 생성자
  MyClass.withValue(this.value);
}

초기화 리스트 (Initializer List)

초기화 리스트는 생성자가 본문을 실행하기 전에 필드를 초기화하는 데 사용됩니다.

class MyClass {
  int value;

  // 초기화 리스트를 사용하는 생성자
  MyClass(int value) : value = value * 2;
}

상수 생성자 (Constant Constructor)

상수 생성자는 불변 객체를 생성하는 데 사용됩니다. 클래스 내 모든 필드가 final이어야 합니다.

class MyClass {
  final int value;

  // 상수 생성자
  const MyClass(this.value);
}

팩토리 생성자 (Factory Constructor)

팩토리 생성자는 새로운 인스턴스를 생성하지 않고 기존 인스턴스를 반환하거나 다른 논리를 추가할 수 있습니다.

class MyClass {
  int value;

  MyClass._internal(this.value);

  // 팩토리 생성자
  factory MyClass(int value) {
    if (value < 0) {
      return MyClass._internal(0);
    }
    return MyClass._internal(value);
  }
}

요약

  1. 기본 생성자: 기본적으로 제공되는 생성자.
  2. 명명된 생성자: 여러 생성자를 정의할 때 사용.
  3. 초기화 리스트: 필드를 생성자 본문 전에 초기화.
  4. 상수 생성자: 불변 객체를 생성할 때 사용.
  5. 팩토리 생성자: 인스턴스를 반환하거나 추가 논리를 수행.

이와 같은 다양한 생성자 방식을 통해 Dart에서는 다양한 객체 초기화 시나리오를 유연하게 처리할 수 있습니다.

생성자의 파라미터는 객체를 생성할 때 필요한 초기 값을 전달하는 방법입니다. Dart에서는 다양한 방식으로 생성자의 파라미터를 정의하고 사용할 수 있습니다. 여기서는 기본 생성자 파라미터, 명명된 파라미터, 선택적 파라미터, 초기화 리스트, 그리고 super 키워드를 사용하는 방법을 설명하겠습니다.

1. 기본 생성자 파라미터

생성자의 파라미터를 기본적으로 사용하는 방법입니다. 생성자를 호출할 때 값을 전달합니다.

class Person {
  String name;
  int age;

  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

void main() {
  var person = Person('John Doe', 30);
  print('${person.name}, ${person.age}'); // 출력: John Doe, 30
}

2. 명명된 파라미터

명명된 파라미터는 파라미터의 이름을 지정하여 생성자를 호출할 때 값을 전달할 수 있습니다. 이는 가독성을 높이고, 파라미터의 순서에 상관없이 값을 전달할 수 있게 합니다.

class Person {
  String name;
  int age;

  Person({String name = 'Unknown', int age = 0}) {
    this.name = name;
    this.age = age;
  }
}

void main() {
  var person1 = Person(name: 'John Doe', age: 30);
  print('${person1.name}, ${person1.age}'); // 출력: John Doe, 30

  var person2 = Person(age: 25);
  print('${person2.name}, ${person2.age}'); // 출력: Unknown, 25
}

3. 선택적 파라미터

선택적 파라미터는 대괄호 []를 사용하여 정의합니다. 선택적 파라미터는 제공되지 않을 경우 기본값을 가집니다.

class Person {
  String name;
  int age;

  Person([String name = 'Unknown', int age = 0]) {
    this.name = name;
    this.age = age;
  }
}

void main() {
  var person1 = Person('John Doe', 30);
  print('${person1.name}, ${person1.age}'); // 출력: John Doe, 30

  var person2 = Person();
  print('${person2.name}, ${person2.age}'); // 출력: Unknown, 0
}

4. 초기화 리스트

초기화 리스트는 생성자의 본문이 실행되기 전에 인스턴스 변수를 초기화할 수 있는 방법입니다. 콜론 :을 사용하여 초기화 리스트를 정의합니다.

class Point {
  int x;
  int y;

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

  Point.origin()
      : x = 0,
        y = 0;
}

void main() {
  var point1 = Point(10, 20);
  print('(${point1.x}, ${point1.y})'); // 출력: (10, 20)

  var point2 = Point.origin();
  print('(${point2.x}, ${point2.y})'); // 출력: (0, 0)
}

5. super 키워드를 사용한 부모 클래스 초기화

자식 클래스의 생성자는 super 키워드를 사용하여 부모 클래스의 생성자를 호출할 수 있습니다. 이는 부모 클래스의 인스턴스를 초기화하는 데 사용됩니다.

class Person {
  String name;

  Person(this.name);
}

class Employee extends Person {
  int id;

  Employee(String name, this.id) : super(name);
}

void main() {
  var employee = Employee('John Doe', 123);
  print('${employee.name}, ${employee.id}'); // 출력: John Doe, 123
}

이러한 다양한 생성자 파라미터 사용법을 통해 객체를 생성할 때 필요한 초기값을 유연하게 전달하고 초기화할 수 있습니다. 상황에 맞게 적절한 방법을 선택하여 사용하면 됩니다.

반응형

+ Recent posts