메서드가 포함된 Enum
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 88번째.
Dart에서 enums는 단순한 상수 목록이 아닙니다. 필드, 생성자, 메서드를 가질 수 있어 강력한 미니 클래스 역할을 합니다. 이를 향상된 열거형(enhanced enums)이라고 하며, 각 enum 값에 동작과 데이터를 직접 연결할 수 있게 해줍니다.
enum Status {
pending('Waiting'),
approved('Accepted'),
rejected('Denied');
final String displayName;
const Status(this.displayName);
bool get isFinalized => this == approved || this == rejected;
}
void main() {
var status = Status.pending;
print(status.displayName); // Waiting
print(status.isFinalized); // false
print(Status.approved.isFinalized); // true
}각 enum 값은 고유한 인수를 사용하여 생성자를 호출합니다. 생성자는 const여야 하며 모든 필드는 final이어야 합니다. enum의 데이터로 작업하거나 다른 값과 비교하는 getter 및 메서드를 추가할 수 있습니다.
향상된 열거형은 인터페이스를 구현할 수도 있어, 훨씬 더 많은 유연성을 제공합니다:
enum Priority implements Comparable<Priority> {
low(1),
medium(2),
high(3);
final int level;
const Priority(this.level);
@override
int compareTo(Priority other) => level.compareTo(other.level);
}
void main() {
var tasks = [Priority.high, Priority.low, Priority.medium];
tasks.sort();
print(tasks); // [Priority.low, Priority.medium, Priority.high]
}향상된 열거형(Enhanced enums)은 메시지가 포함된 상태 코드, 레벨이 포함된 우선순위, 또는 좌표가 포함된 방향과 같이, 각각 관련된 데이터나 동작이 필요한 고정된 값의 집합이 있을 때 사용하기에 이상적입니다.
챌린지
쉬움향상된 열거형(enhanced enums)을 사용하여 작업 관리 시스템을 구축해 봅시다! 작업을 정리하고 우선순위를 정하는 데 도움이 되는 고유한 속성과 동작을 가진 다양한 작업 카테고리를 나타내는 열거형을 만들 것입니다.
코드는 두 개의 파일로 구성됩니다:
task_category.dart: 프로젝트의 다양한 작업 유형을 나타내는TaskCategory라는 향상된 열거형을 만듭니다. 각 카테고리는 다음을 포함해야 합니다:- 사람이 읽을 수 있는 이름을 위한
String label필드 int priority필드 (1이 가장 높은 우선순위, 3이 가장 낮은 우선순위)- 두 필드를 모두 초기화하는
const생성자 - 네 개의 열거형 값:
bug(label: "Bug Fix", priority: 1),feature(label: "New Feature", priority: 2),documentation(label: "Documentation", priority: 3),testing(label: "Testing", priority: 2) - 우선순위가 1인 경우
true를 반환하는 게터isUrgent [label] (Priority: [priority])형식의 문자열을 반환하는describe()메서드
Comparable<TaskCategory>를 구현해야 합니다.- 사람이 읽을 수 있는 이름을 위한
main.dart: 작업 카테고리 열거형을 가져와서 그 기능을 시연합니다:feature,bug,documentation,testing순서로 네 가지 작업 카테고리를 모두 포함하는 리스트를 만듭니다.describe()메서드를 사용하여 각 카테고리의 설명을 한 줄에 하나씩 출력합니다.- 빈 줄을 하나 출력합니다.
- 리스트를 우선순위에 따라 정렬하고
After sorting by priority:를 출력합니다. - 정렬된 각 카테고리의 레이블을 한 줄에 하나씩 출력합니다.
- 빈 줄을 하나 출력합니다.
Urgent tasks:를 출력합니다.- 원래 순서(
feature,bug,documentation,testing)대로 반복문을 돌며isUrgent가 true인 카테고리의 레이블만 출력합니다.
이 챌린지는 필드, 생성자, 게터, 메서드, 인터페이스 구현 등 향상된 열거형의 기능들을 결합하여 유용한 작업 분류 시스템을 만드는 과정을 다룹니다!
예상 출력 결과:
New Feature (Priority: 2)
Bug Fix (Priority: 1)
Documentation (Priority: 3)
Testing (Priority: 2)
After sorting by priority:
Bug Fix
New Feature
Testing
Documentation
Urgent tasks:
Bug Fix치트 시트
Dart의 향상된 열거형(Enhanced enums)은 필드, 생성자, 메서드를 가질 수 있어, 각 열거형 값에 동작과 데이터를 연결하는 강력한 미니 클래스 역할을 합니다.
필드와 생성자가 있는 기본적인 향상된 열거형:
enum Status {
pending('Waiting'),
approved('Accepted'),
rejected('Denied');
final String displayName;
const Status(this.displayName);
}주요 요구 사항:
- 생성자는 반드시
const여야 합니다. - 모든 필드는 반드시
final이어야 합니다. - 각 열거형 값은 특정 인수를 사용하여 생성자를 호출합니다.
향상된 열거형은 게터(getter)와 메서드를 포함할 수 있습니다:
enum Status {
pending('Waiting'),
approved('Accepted'),
rejected('Denied');
final String displayName;
const Status(this.displayName);
bool get isFinalized => this == approved || this == rejected;
}향상된 열거형은 Comparable과 같은 인터페이스를 구현할 수 있습니다:
enum Priority implements Comparable<Priority> {
low(1),
medium(2),
high(3);
final int level;
const Priority(this.level);
@override
int compareTo(Priority other) => level.compareTo(other.level);
}각각 연관된 데이터나 동작이 필요한 고정된 값 집합이 있을 때 향상된 열거형을 사용하세요.
직접 해보기
import 'task_category.dart';
void main() {
// TODO: 다음 순서대로 네 가지 작업 카테고리를 모두 포함하는 리스트를 생성하세요:
// feature, bug, documentation, testing
// TODO: describe()를 사용하여 각 카테고리의 설명을 한 줄에 하나씩 출력하세요
// TODO: 빈 줄을 출력하세요
// TODO: 우선순위(priority)에 따라 리스트를 정렬하세요
// TODO: "After sorting by priority:"를 출력하세요
// TODO: 정렬된 각 카테고리의 라벨(label)을 한 줄에 하나씩 출력하세요
// TODO: 빈 줄을 출력하세요
// TODO: "Urgent tasks:"를 출력하세요
// TODO: 원래 순서(feature, bug, documentation, testing)대로 루프를 돌면서
// isUrgent가 true인 카테고리의 라벨만 출력하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.