Menu
Coddy logo textTech

상수 생성자

Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 13번째.

상수 생성자(constant constructor)는 컴파일 타임 상수 객체를 생성합니다. const 생성자를 사용하여 동일한 값으로 객체를 생성하면, Dart는 메모리에서 동일한 인스턴스를 재사용하여 성능을 향상시킵니다.

상수 생성자를 만들려면 생성자 이름 앞에 const 키워드를 추가하고, 모든 인스턴스 변수가 final인지 확인하세요:

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

whitealsoWhite는 상수 생성자를 사용하여 동일한 값으로 생성되었기 때문에 메모리 상의 정확히 동일한 객체를 가리킵니다.

또한 const 키워드 없이 const 생성자를 사용할 수 있으며, 이 경우 일반적인(상수가 아닌) 인스턴스가 생성됩니다:

var red = Color(255, 0, 0);       // 일반 인스턴스
const blue = Color(0, 0, 255);    // 상수 인스턴스

상수 생성자는 불변 설정 객체, 색상이나 크기와 같은 미리 정의된 값, 그리고 메모리 사용을 최적화하면서 객체 불변성을 보장하려는 모든 곳에서 흔히 사용됩니다.

challenge icon

챌린지

쉬움

불변이고 재사용 가능한 설정을 정의하기 위해 상수 생성자를 사용하는 간단한 게임용 설정 시스템을 만들어 보겠습니다.

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

  • difficulty.dart: 게임 난이도 설정을 나타내는 Difficulty 클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다:
    • 세 개의 final 필드: name (String), enemyCount (int), playerLives (int)
    • 세 필드를 모두 초기화하는 상수 생성자
    • 난이도 정보를 출력하는 display() 메서드
  • main.dart: 난이도 클래스를 임포트하고 세 가지 상수 난이도 프리셋을 생성합니다:
    • easy: name은 'Easy', 5마리의 적, 5개의 생명
    • medium: name은 'Medium', 10마리의 적, 3개의 생명
    • hard: name은 'Hard', 20마리의 적, 1개의 생명
    const 키워드를 사용하여 세 가지 모두 컴파일 타임 상수로 생성하세요. 그런 다음 위에 나열된 순서대로 각각에 대해 display()를 호출합니다. 마지막으로 identical()을 사용하여 두 개의 const Difficulty('Easy', 5, 5) 객체가 동일한지 확인하고 결과를 출력하세요.

display() 메서드는 정확히 다음 형식으로 출력해야 합니다:

[name]: [enemyCount] enemies, [playerLives] lives

예상 출력:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

치트 시트

상수 생성자(constant constructor)는 컴파일 타임 상수 객체를 생성합니다. 동일한 값을 가진 객체가 const 생성자를 사용하여 생성될 때, Dart는 메모리에서 동일한 인스턴스를 재사용합니다.

상수 생성자를 생성하려면 생성자 이름 앞에 const 키워드를 추가하고 모든 인스턴스 변수가 final인지 확인하세요.

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

동일한 값을 가진 상수 인스턴스를 생성하면 메모리에서 동일한 객체가 생성됩니다.

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Const 생성자는 const 키워드 없이 일반 인스턴스를 생성하는 데에도 사용할 수 있습니다.

var red = Color(255, 0, 0);       // 일반 인스턴스
const blue = Color(0, 0, 255);    // 상수 인스턴스

상수 생성자는 불변 설정 객체, 미리 정의된 값 및 메모리 사용 최적화에 유용합니다.

직접 해보기

import 'difficulty.dart';

void main() {
  // TODO: const 키워드를 사용하여 세 가지 상수 난이도 프리셋을 생성하세요:
  // - easy: 이름 'Easy', 적 5명, 생명 5개
  // - medium: 이름 'Medium', 적 10명, 생명 3개
  // - hard: 이름 'Hard', 적 20명, 생명 1개
  
  // TODO: 각 난이도에 대해 easy, medium, hard 순서대로 display()를 호출하세요
  
  // TODO: 두 개의 const Difficulty('Easy', 5, 5) 객체가 동일한지 확인하세요
  // identical()을 사용하고 결과를 출력하세요
}
quiz icon실력 점검

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

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