반응형
Dart의 Constructor(생성자)
생성자(Constructor)는 클래스의 인스턴스를 생성하고 초기화하는 데 사용되는 특별한 메서드입니다. Dart에서 생성자는 클래스와 동일한 이름을 가지며, 객체를 생성할 때 호출됩니다. 생성자는 객체의 초기 상태를 설정하거나, 특정 작업을 수행하면서 객체를 초기화할 때 주로 사용됩니다.
생성자의 주요 특징
- 클래스와 동일한 이름을 가집니다.
- 객체가 생성될 때 자동으로 호출됩니다.
- 반환 타입이 없습니다.
- 기본 생성자가 없을 경우, Dart는 자동으로 기본 생성자(매개변수 없는 생성자)를 제공합니다.
생성자의 종류
1. 기본 생성자
Dart에서 생성자는 클래스와 동일한 이름을 가지며, 매개변수를 통해 필드 값을 초기화할 수 있습니다.
예시:
class Person {
String name;
int age;
// 기본 생성자
Person(String name, int age) {
this.name = name; // this를 사용하여 클래스 필드를 초기화
this.age = age;
}
void introduce() {
print('안녕하세요! 저는 $name이고, 나이는 $age입니다.');
}
}
void main() {
Person person = Person('홍길동', 25);
person.introduce();
}
출력:
안녕하세요! 저는 홍길동이고, 나이는 25입니다.
2. 간략화된 생성자 (축약 생성자)
Dart에서는 축약 문법을 사용하여 필드를 간단하게 초기화할 수 있습니다. this 키워드를 사용하여 클래스의 필드를 직접 초기화합니다.
예시:
class Person {
String name;
int age;
// 축약 생성자
Person(this.name, this.age);
void introduce() {
print('안녕하세요! 저는 $name이고, 나이는 $age입니다.');
}
}
void main() {
Person person = Person('홍길동', 25);
person.introduce();
}
출력:
안녕하세요! 저는 홍길동이고, 나이는 25입니다.
3. 이름이 지정된 생성자 (Named Constructor)
여러 생성자를 사용할 경우, 이름을 지정하여 다양한 방식으로 객체를 초기화할 수 있습니다.
예시:
class Person {
String name;
int age;
// 기본 생성자
Person(this.name, this.age);
// 이름이 지정된 생성자
Person.namedConstructor(String name) {
this.name = name;
this.age = 0; // 나이는 기본값으로 설정
}
void introduce() {
print('안녕하세요! 저는 $name이고, 나이는 $age입니다.');
}
}
void main() {
Person person1 = Person('홍길동', 25);
person1.introduce();
Person person2 = Person.namedConstructor('이순신');
person2.introduce();
}
출력:
안녕하세요! 저는 홍길동이고, 나이는 25입니다.
안녕하세요! 저는 이순신이고, 나이는 0입니다.
4. 초기화 리스트 (Initializer List)
초기화 리스트는 생성자가 본문을 실행하기 전에 필드 값을 초기화하는 데 사용됩니다. 주로 final 필드와 같이 한 번만 초기화 가능한 필드를 설정할 때 유용합니다.
예시:
class Circle {
final double radius;
final double area;
// 초기화 리스트를 사용한 생성자
Circle(this.radius) : area = 3.14 * radius * radius;
void showArea() {
print('반지름: $radius, 면적: $area');
}
}
void main() {
Circle circle = Circle(5);
circle.showArea();
}
출력:
반지름: 5.0, 면적: 78.5
5. 팩토리 생성자 (Factory Constructor)
팩토리 생성자는 새로운 인스턴스를 생성하는 대신 기존의 인스턴스를 반환하거나 특정 조건에 따라 객체를 생성해야 할 때 사용됩니다.
예시:
class Singleton {
static final Singleton _instance = Singleton._internal();
// private 생성자
Singleton._internal();
// 팩토리 생성자
factory Singleton() {
return _instance;
}
}
void main() {
var obj1 = Singleton();
var obj2 = Singleton();
print(obj1 == obj2); // true (같은 객체를 반환)
}
출력:
true
생성자를 사용할 때 주의할 점
- 매개변수 순서와 이름에 주의: 필드 이름과 매개변수 이름이 같을 때는 this를 사용하여 혼동을 피합니다.
- final 또는 const 필드 초기화: final 필드는 반드시 생성자를 통해 초기화해야 하며, const 필드는 컴파일 시점에 값이 결정되어야 합니다.
- 생성자와 메서드 구분: 생성자는 반환 타입이 없으며, 클래스와 동일한 이름을 가집니다.
반응형
'Flutter' 카테고리의 다른 글
다트 이해하기 - (6) Flutter의 build 함수 (0) | 2024.12.01 |
---|---|
다트 이해하기 - (5) Flutter의 createElement 함수 (0) | 2024.12.01 |
다트 이해하기 - (3) 위젯이란? (0) | 2024.12.01 |
다트 이해하기 - (2) 내장 변수타입 (0) | 2024.12.01 |
다트 이해하기 - (1) 변수 (0) | 2024.12.01 |