const로 생성자 선언
상수 생성자는 다음처럼 const 예약어로 선언하면 본문을 가질 수 없습니다. 즉, {}를 추가할 수 없습니다.
// 상수 생성자 선언
class MyClass {
const MyClass();
}
또한 상수 생성자가 선언된 클래스의 모든 멤버 변수는 final로 선언해야 합니다. 다음 코드에서는 MyClass의 멤버 변수를 final로 선언하지 않았는데 const로 상수 생성자를 선언해서 오류가 발생합니다. 생성자를 const로 선언할 때는 클래스의 모든 변수를 final로 선언해야 합니다. 따라서 상수 생성자는 클래스의 모든 변수를 초깃값으로만 사용하도록 강제하는 수단으로 사용합니다.
// 상수 생성자 잘못 선언한 예
class MyClass {
int data1;
const MyClass(); // 오류
}
상수 생성자도 객체를 생성할 수 있으며 필요하다면 여러 개의 객체를 생성할 수도 있습니다.
// 상수 생성자의 객체 생성
class MyClass {
final int data1;
const MyClass(this.data1);
}
main() {
var obj1 = MyClass(10);
var obj2 = MyClass(20);
print('obj1.data : ${obj1.data1}, obj2.data : ${obj2.data1}');
}
▶ 실행 결과
obj1.data : 10, obj2.data : 20
Const로 객체 생성
객체를 생성할 때도 필요하다면 const를 추가해 상수 객체로 만들 수 있습니다. const로 객체를 생성하려면 생성자 또한 const로 선언해야 합니다. 다음 코드는 객체를 생성할 때 const를 사용했지만, const로 선언한 상수 생성자가 없어서 오류가 발생합니다.
// 상수 객체 생성 오류
class MyClass { }
main() {
var obj1 = const MyClass(); // 오류
}
const로 객체를 생성하려면 다음처럼 생성자에도 const를 추가해야 합니다.
// 상수 객체 생성
class MyClass {
final int data1;
const MyClass(this.data1);
}
main() {
var obj1 = const MyClass(10);
}
상수 생성자를 선언한 클래스더라도 일반 객체로 선언하면 서로 다른 객체가 생성됩니다. 따라서 다음 코드에서 obj1과 obj2는 같은 값으로 초기화 했지만 서로 다른 객체입니다.
// 일반 객체 선언
var obj1 = MyClass(10);
var obj2 = MyClass(10);
print('obj1 == obj2 : ${obj1 == obj2}'); // false
그러나 const를 붙여 상수 객체로 선언하면서 생성자에 전달한 값(초깃값)이 똑같으면 객체를 다시 생성하지 않고 이전 값으로 생성한 객체를 그대로 사용합니다. 즉, 상수 객체는 값이 똑같은 객체를 재사용합니다.
다음 코드에서는 obj1과 obj2에 const 붙여 상수 객체로 선언했습니다. 이때 obj2는 이미 10으로 초기화한 obj1 객체가 있으므로 새로 생성하지 않고 obj1을 obj2에 대입합니다. 따라서 객체 이름은 obj1, obj2로 다르지만 실제 사용되는 값은 obj1의 10입니다.
// 같은 갑으로 상수 객체 선언
var obj1 = const MyClass(10);
var obj2 = const MyClass(10);
print('obj1 == obj2 : ${obj1 == obj2}'); // true
그러나 객체를 생성할 때 전달하는 초깃값이 다르면 서로 다른 객체가 생성됩니다. 즉, 상수객체는 같은 값으로 생성한 객체를 재활용할 목적으로 사용합니다.
// 다른 값으로 상수 객체 선언
var obj1 = const MyClass(10);
var obj2 = const MyClass(20);
print('obj1 == obj2 : ${obj1 == obj2}'); // false
만약 똑같은 값으로 객체를 2개 생성하면서 하나는 일반 객체, 하나는 const를 붙여 상수 객체로 선언하면 어떨까요? 이때에는 서로 다른 객체가 생성됩니다.
// 같은 값으로 상수 객체와 일반 객체 선언
var obj1 = const MyClass(10);
var obj2 = MyClass(10);
print('obj1 == obj2 : ${obj1 == obj2}'); // false
'Flutter' 카테고리의 다른 글
추상 클래스와 인터페이스 (1) | 2024.11.15 |
---|---|
상속 알아보기 (0) | 2024.11.14 |
팩토리 생성자 (0) | 2024.11.14 |
명명된 생성자 (0) | 2024.11.14 |
생성자와 멤버 초기화 (0) | 2024.11.13 |
const로 생성자 선언
상수 생성자는 다음처럼 const 예약어로 선언하면 본문을 가질 수 없습니다. 즉, {}를 추가할 수 없습니다.
// 상수 생성자 선언
class MyClass {
const MyClass();
}
또한 상수 생성자가 선언된 클래스의 모든 멤버 변수는 final로 선언해야 합니다. 다음 코드에서는 MyClass의 멤버 변수를 final로 선언하지 않았는데 const로 상수 생성자를 선언해서 오류가 발생합니다. 생성자를 const로 선언할 때는 클래스의 모든 변수를 final로 선언해야 합니다. 따라서 상수 생성자는 클래스의 모든 변수를 초깃값으로만 사용하도록 강제하는 수단으로 사용합니다.
// 상수 생성자 잘못 선언한 예
class MyClass {
int data1;
const MyClass(); // 오류
}
상수 생성자도 객체를 생성할 수 있으며 필요하다면 여러 개의 객체를 생성할 수도 있습니다.
// 상수 생성자의 객체 생성
class MyClass {
final int data1;
const MyClass(this.data1);
}
main() {
var obj1 = MyClass(10);
var obj2 = MyClass(20);
print('obj1.data : ${obj1.data1}, obj2.data : ${obj2.data1}');
}
▶ 실행 결과
obj1.data : 10, obj2.data : 20
Const로 객체 생성
객체를 생성할 때도 필요하다면 const를 추가해 상수 객체로 만들 수 있습니다. const로 객체를 생성하려면 생성자 또한 const로 선언해야 합니다. 다음 코드는 객체를 생성할 때 const를 사용했지만, const로 선언한 상수 생성자가 없어서 오류가 발생합니다.
// 상수 객체 생성 오류
class MyClass { }
main() {
var obj1 = const MyClass(); // 오류
}
const로 객체를 생성하려면 다음처럼 생성자에도 const를 추가해야 합니다.
// 상수 객체 생성
class MyClass {
final int data1;
const MyClass(this.data1);
}
main() {
var obj1 = const MyClass(10);
}
상수 생성자를 선언한 클래스더라도 일반 객체로 선언하면 서로 다른 객체가 생성됩니다. 따라서 다음 코드에서 obj1과 obj2는 같은 값으로 초기화 했지만 서로 다른 객체입니다.
// 일반 객체 선언
var obj1 = MyClass(10);
var obj2 = MyClass(10);
print('obj1 == obj2 : ${obj1 == obj2}'); // false
그러나 const를 붙여 상수 객체로 선언하면서 생성자에 전달한 값(초깃값)이 똑같으면 객체를 다시 생성하지 않고 이전 값으로 생성한 객체를 그대로 사용합니다. 즉, 상수 객체는 값이 똑같은 객체를 재사용합니다.
다음 코드에서는 obj1과 obj2에 const 붙여 상수 객체로 선언했습니다. 이때 obj2는 이미 10으로 초기화한 obj1 객체가 있으므로 새로 생성하지 않고 obj1을 obj2에 대입합니다. 따라서 객체 이름은 obj1, obj2로 다르지만 실제 사용되는 값은 obj1의 10입니다.
// 같은 갑으로 상수 객체 선언
var obj1 = const MyClass(10);
var obj2 = const MyClass(10);
print('obj1 == obj2 : ${obj1 == obj2}'); // true
그러나 객체를 생성할 때 전달하는 초깃값이 다르면 서로 다른 객체가 생성됩니다. 즉, 상수객체는 같은 값으로 생성한 객체를 재활용할 목적으로 사용합니다.
// 다른 값으로 상수 객체 선언
var obj1 = const MyClass(10);
var obj2 = const MyClass(20);
print('obj1 == obj2 : ${obj1 == obj2}'); // false
만약 똑같은 값으로 객체를 2개 생성하면서 하나는 일반 객체, 하나는 const를 붙여 상수 객체로 선언하면 어떨까요? 이때에는 서로 다른 객체가 생성됩니다.
// 같은 값으로 상수 객체와 일반 객체 선언
var obj1 = const MyClass(10);
var obj2 = MyClass(10);
print('obj1 == obj2 : ${obj1 == obj2}'); // false
'Flutter' 카테고리의 다른 글
추상 클래스와 인터페이스 (1) | 2024.11.15 |
---|---|
상속 알아보기 (0) | 2024.11.14 |
팩토리 생성자 (0) | 2024.11.14 |
명명된 생성자 (0) | 2024.11.14 |
생성자와 멤버 초기화 (0) | 2024.11.13 |