기본 생성자
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 10번째.
클래스에서 생성자를 정의하지 않으면, Dart는 자동으로 기본 생성자를 제공합니다. 이것은 단순히 클래스의 인스턴스를 생성하는 매개변수가 없는 생성자입니다.
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart는 기본 생성자를 제공합니다: Book()
Book myBook = Book();
print(myBook.title); // Unknown기본 생성자는 코드에서 보이지 않지만, 존재합니다. 이것은 인수를 받지 않으며, 인스턴스 변수에 할당한 기본값으로 객체를 초기화합니다.
사용자 정의 생성자를 정의하면, 기본 생성자는 더 이상 자동으로 제공되지 않습니다. 매개변수가 있는 생성자와 함께 인수가 없는 생성자를 여전히 사용하려면, 이를 명시적으로 생성해야 합니다:
class Book {
String title;
int pages;
// 명시적 기본 생성자
Book() : title = 'Unknown', pages = 0;
// 매개변수가 있는 생성자
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // 기본 생성자 사용
Book book2 = Book.withDetails('Dart', 300); // 매개변수가 있는 생성자 사용명시적 기본 생성자는 초기값을 설정하기 위해 초기화 리스트(콜론 뒤의 부분)를 사용합니다. 이 패턴은 동일한 클래스에서 객체를 생성하는 여러 가지 방법을 제공하고 싶을 때 유용합니다.
챌린지
쉬움암시적 및 명시적 기본 생성자를 모두 보여주는 간단한 제품 인벤토리 시스템을 구축해 보겠습니다.
코드를 구성하기 위해 두 개의 파일을 생성합니다:
product.dart: 제품을 생성하는 두 가지 방법을 제공하는Product클래스를 정의합니다:- 이니셜라이저 리스트를 사용하여
name을'Unnamed'로,price를0.0으로 초기화하는 명시적 기본 생성자Product() name과price매개변수를 받는 명명된 생성자Product.withDetailsProduct: [name] - $[price]를 출력하는display()메서드
- 이니셜라이저 리스트를 사용하여
main.dart: 제품 클래스를 임포트하고 두 개의 제품을 생성합니다:- 기본 생성자를 사용하는 제품 하나
'Laptop'과999.99를 사용하는 명명된 생성자를 사용하는 제품 하나
display()를 호출합니다.
Product 클래스는 두 개의 인스턴스 변수를 가져야 합니다:
String namedouble price
예상 출력 형식:
Product: Unnamed - $0.0
Product: Laptop - $999.99치트 시트
클래스에 생성자가 정의되지 않은 경우, Dart는 매개변수가 없는 기본 생성자를 자동으로 제공합니다:
class Book {
String title = 'Unknown';
int pages = 0;
}
Book myBook = Book(); // 암시적 기본 생성자를 사용함
print(myBook.title); // Unknown직접 생성자를 정의하면 기본 생성자는 더 이상 자동으로 제공되지 않습니다. 인수가 없는 생성자와 매개변수가 있는 생성자를 모두 가지려면 명시적으로 생성해야 합니다:
class Book {
String title;
int pages;
// 이니셜라이저 리스트를 사용한 명시적 기본 생성자
Book() : title = 'Unknown', pages = 0;
// 이름 있는 생성자
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // 기본 생성자 사용
Book book2 = Book.withDetails('Dart', 300); // 이름 있는 생성자 사용명시적 기본 생성자는 초기값을 설정하기 위해 (콜론 뒤에) 이니셜라이저 리스트를 사용합니다.
직접 해보기
import 'product.dart';
void main() {
// TODO: 기본 생성자를 사용하여 product 생성하기
// TODO: 'Laptop'과 999.99를 사용하여 명명된 생성자(named constructor)로 product 생성하기
// TODO: 각 product에 대해 display() 호출하기
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.