이름 있는 생성자
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 11번째.
이름이 있는 생성자(Named constructors)를 사용하면 클래스에 대해 여러 개의 생성자를 만들 수 있으며, 각 생성자에는 그 목적을 명확히 하는 설명적인 이름을 붙일 수 있습니다. 이는 객체를 초기화하는 다양한 방식이 필요할 때 특히 유용합니다.
구문은 클래스 이름 뒤에 점(.)과 생성자 이름을 사용합니다:
class Point {
int x;
int y;
// 일반 생성자
Point(this.x, this.y);
// 원점을 위한 이름 있는 생성자
Point.origin() : x = 0, y = 0;
// 단일 값으로부터의 이름 있는 생성자
Point.diagonal(int value) : x = value, y = value;
}각 명명된 생성자(named constructor)는 객체를 생성하는 명확하고 읽기 쉬운 방법을 제공합니다:
Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);
print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)이름이 있는 생성자(Named constructors)는 코드를 더 표현력 있게 만듭니다. Point(0, 0)이 무엇을 의미하는지 추측하는 대신, Point.origin()은 의도를 즉시 전달합니다. 이 패턴은 Dart 라이브러리에서 흔히 사용되며 자기 문서화(self-documenting) 코드를 작성하는 데 도움이 됩니다.
챌린지
쉬움명명된 생성자(named constructors)의 강력함을 보여주는 온도 변환기를 만들어 보겠습니다. 시작하는 단위에 따라 다양한 방식으로 초기화할 수 있는 Temperature 클래스를 생성하게 됩니다.
코드를 두 개의 파일로 구성합니다:
temperature.dart:double celsius인스턴스 변수를 가진Temperature클래스를 정의합니다. 클래스는 온도를 생성하는 세 가지 방법을 제공해야 합니다:- Celsius 값을 직접 받는 일반 생성자
Temperature(this.celsius) - Fahrenheit 값을 받아
(fahrenheit - 32) * 5 / 9공식을 사용하여 Celsius로 변환하는 명명된 생성자Temperature.fromFahrenheit - 빙점(섭씨 0도)의 온도를 생성하는 명명된 생성자
Temperature.freezing()
[celsius]C를 출력하는display()메서드를 추가합니다.- Celsius 값을 직접 받는 일반 생성자
main.dart: 온도 클래스를 임포트하고 세 개의 온도 객체를 생성합니다:- 일반 생성자에
25.0을 사용하여 생성 fromFahrenheit에98.6을 사용하여 생성freezing()을 사용하여 생성
display()를 호출합니다.- 일반 생성자에
예상 출력 형식:
25.0C
37.0C
0.0C치트 시트
이름이 있는 생성자(Named constructors)를 사용하면 클래스에 대해 목적을 명확하게 설명하는 이름을 가진 여러 생성자를 생성할 수 있습니다.
구문은 클래스 이름 뒤에 점(.)과 생성자 이름을 붙여 사용합니다:
class Point {
int x;
int y;
// 일반 생성자
Point(this.x, this.y);
// 원점을 위한 이름이 있는 생성자
Point.origin() : x = 0, y = 0;
// 단일 값으로부터 생성하는 이름이 있는 생성자
Point.diagonal(int value) : x = value, y = value;
}이름이 있는 생성자 사용하기:
Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);
print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)이름이 있는 생성자는 의도를 명확하게 전달함으로써 코드를 더 표현력 있게 만들고 자기 문서화(self-documenting)가 가능하게 합니다.
직접 해보기
import 'temperature.dart';
void main() {
// TODO: 25.0을 사용하여 일반 생성자로 Temperature 생성하기
// TODO: 98.6을 사용하여 fromFahrenheit로 Temperature 생성하기
// TODO: freezing()을 사용하여 Temperature 생성하기
// TODO: 각 temperature에 대해 순서대로 display() 호출하기
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.