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);
}
}
요약
- 기본 생성자: 기본적으로 제공되는 생성자.
- 명명된 생성자: 여러 생성자를 정의할 때 사용.
- 초기화 리스트: 필드를 생성자 본문 전에 초기화.
- 상수 생성자: 불변 객체를 생성할 때 사용.
- 팩토리 생성자: 인스턴스를 반환하거나 추가 논리를 수행.
이와 같은 다양한 생성자 방식을 통해 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
}
이러한 다양한 생성자 파라미터 사용법을 통해 객체를 생성할 때 필요한 초기값을 유연하게 전달하고 초기화할 수 있습니다. 상황에 맞게 적절한 방법을 선택하여 사용하면 됩니다.
'[====== Development ======] > Flutter' 카테고리의 다른 글
Flutter - 여러 버전의 Dark SDK 사용하는 방법 (2) | 2024.11.07 |
---|---|
안드로이드 디바이스에서 디버깅시 화면이 꺼지지 않도록 유지하는 방법 (0) | 2024.08.03 |
[Flutter] 자식 Widget에서 부모 Widget 으로 이벤트 전달 (0) | 2024.07.07 |
[Flutter] GlobalKey 에 대해서 (2) | 2024.06.21 |
[Flutter] DefaultTabController 에 대해서.. (0) | 2024.06.20 |