생성자(Constructor)를 사용해서 객체를 만들 수 있습니다. 생성자의 이름은 ClassName이나 ClassName.identifier를 사용할 수 있습니다. 예를 들어, 아래 코드는 Point()와 Point.fromJson() 생성자를 이용해서 Point 객체를 생성합니다.
var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});
아래 코드는 위에 코드와 동일한 표현입니다. Dart 언어에서 생성자 이름 앞에 new 키워드를 사용하는 것은 선택 사항입니다.
var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});
일부 클래스는 상수 생성자(Constant constructors)를 제공합니다. 상수 생성자를 사용하면 컴파일 타임 상수 객체를 생성하려면 생성자 이름 앞에 const를 붙입니다.
var p = const ImmutablePoint(2, 2);
두 개의 동일한 컴파일 타임 상수 객체를 구성하면 하나의 표준 인스턴스가 생성됩니다.
class ImmutablePoint {
final int x;
final int y;
const ImmutablePoint(this.x, this.y);
}
void main() {
var a = const ImmutablePoint(1, 1);
var b = const ImmutablePoint(1, 1);
// 두 객체는 같은 객체입니다.
print("a == b ? ${identical(a, b)}");
var c = ImmutablePoint(1, 1);
var d = ImmutablePoint(1, 1);
// 두 객체는 다른 객체입니다.
print("c == d ? ${identical(c, d)}");
}
상수 컨텍스트(Context) 내에서 생성자 리터럴 앞에서 const를 생략할 수 있습니다. 아래 예제는 const 맵을 생성하는 코드인데 너무 많은 const 키워드가 사용되었습니다.