Menu
Coddy logo textTech

기본 생성자

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); // 매개변수가 있는 생성자 사용

명시적 기본 생성자는 초기값을 설정하기 위해 초기화 리스트(콜론 뒤의 부분)를 사용합니다. 이 패턴은 동일한 클래스에서 객체를 생성하는 여러 가지 방법을 제공하고 싶을 때 유용합니다.

challenge icon

챌린지

쉬움

암시적 및 명시적 기본 생성자를 모두 보여주는 간단한 제품 인벤토리 시스템을 구축해 보겠습니다.

코드를 구성하기 위해 두 개의 파일을 생성합니다:

  • product.dart: 제품을 생성하는 두 가지 방법을 제공하는 Product 클래스를 정의합니다:
    • 이니셜라이저 리스트를 사용하여 name'Unnamed'로, price0.0으로 초기화하는 명시적 기본 생성자 Product()
    • nameprice 매개변수를 받는 명명된 생성자 Product.withDetails
    • Product: [name] - $[price]를 출력하는 display() 메서드
  • main.dart: 제품 클래스를 임포트하고 두 개의 제품을 생성합니다:
    • 기본 생성자를 사용하는 제품 하나
    • 'Laptop'999.99를 사용하는 명명된 생성자를 사용하는 제품 하나
    각 제품에 대해 display()를 호출합니다.

Product 클래스는 두 개의 인스턴스 변수를 가져야 합니다:

  • String name
  • double 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() 호출하기
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨