List, Set, Map 개요
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 63번째.
Dart는 애플리케이션을 빌드할 때 지속적으로 사용하게 될 세 가지 핵심 컬렉션 유형을 제공합니다. 각 유형은 데이터를 구성하고 액세스하는 데 있어 서로 다른 목적을 수행합니다.
List는 인덱스로 요소에 접근하는 순서가 있는 컬렉션입니다. 항목은 삽입 순서를 유지하며 중복이 허용됩니다:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set은 고유한 요소들의 순서가 없는 컬렉션입니다. 중복된 요소를 추가하려고 하면 간단히 무시됩니다:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Map은 키-값 쌍을 저장하며, 연결된 키를 통해 값을 찾을 수 있게 해줍니다:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30간단한 비교는 다음과 같습니다:
| 컬렉션 | 순서 보장 | 중복 허용 | 접근 방식 |
|---|---|---|---|
| List | 예 | 허용 | 인덱스 |
| Set | 아니요 | 허용 안 함 | 포함 여부 확인 |
| Map | 아니요* | 고유 키 | 키 |
이러한 컬렉션들은 제네릭(generics)과 결합될 때 더욱 강력해지며, 향후 레슨에서 여러분의 커스텀 클래스와 함께 작동하는 타입 안정성이 보장된 컬렉션을 만드는 방법을 살펴보게 될 것입니다.
챌린지
쉬움세 가지 컬렉션 타입을 모두 사용하여 학생 데이터를 다양한 방식으로 정리하는 교실 관리 시스템을 구축해 보겠습니다. 동일한 정보를 관리할 때 List, Set, Map이 각각 어떻게 고유한 목적을 수행하는지 확인하게 될 것입니다.
코드를 두 개의 파일로 구성합니다:
classroom.dart: 세 가지 컬렉션 타입을 사용하여 학생 데이터를 관리하는Classroom클래스를 생성합니다:- 학생들이 도착한 순서대로 추적하는
attendanceOrder라는 이름의List<String>(한 학생이 여러 번 출석 체크를 한 경우 중복 허용) - 어떤 학생들이 출석했는지 추적하는
uniqueStudents라는 이름의Set<String>(중복 없음) - 각 학생의 시험 점수를 저장하는
scores라는 이름의Map<String, int>
recordArrival(String name)- 출석 리스트(attendance list)와 고유 학생 세트(unique students set) 모두에 이름을 추가합니다.setScore(String name, int score)- 맵에 학생의 점수를 저장합니다.printReport()- 교실 보고서를 출력합니다 (아래에 표시된 형식).
- 학생들이 도착한 순서대로 추적하는
main.dart: classroom 파일을 임포트하고 시스템을 시연합니다:Classroom인스턴스를 생성합니다.- 다음 순서대로 도착을 기록합니다:
'Alice','Bob','Alice','Carol','Bob' - 점수를 설정합니다: Alice =
95, Bob =87, Carol =92 printReport()를 호출합니다.
printReport() 메서드는 다음과 같이 출력해야 합니다:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}List가 모든 도착 기록(중복 포함)을 어떻게 보존하는지, Set이 어떻게 자동으로 고유한 이름만 유지하는지, 그리고 Map이 어떻게 각 학생과 점수를 연결하는지 주목해 보세요. 각 컬렉션 타입은 그 목적을 완벽하게 수행합니다!
예상 출력:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}치트 시트
Dart는 데이터를 구성하기 위한 세 가지 핵심 컬렉션 타입을 제공합니다:
List - 인덱스로 요소에 접근하는 순서가 있는 컬렉션입니다. 중복이 허용됩니다:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set - 고유한 요소들로 이루어진 순서가 없는 컬렉션입니다. 중복은 자동으로 무시됩니다:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Map - 키를 통한 조회를 위해 키-값 쌍을 저장합니다:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30| 컬렉션 | 순서 있음 | 중복 | 접근 방식 |
|---|---|---|---|
| List | 예 | 허용됨 | 인덱스 |
| Set | 아니요 | 허용되지 않음 | 포함 여부 확인 |
| Map | 아니요* | 고유 키 | 키 |
직접 해보기
import 'classroom.dart';
void main() {
// TODO: Classroom 인스턴스 생성
// TODO: 다음 순서대로 도착 기록: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
// TODO: 점수 설정: Alice = 95, Bob = 87, Carol = 92
// TODO: printReport()를 호출하여 강의실 데이터 표시
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.