Menu
Coddy logo textTech

List, Set, Map 개요

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

Dart는 애플리케이션을 빌드할 때 지속적으로 사용하게 될 세 가지 핵심 컬렉션 유형을 제공합니다. 각 유형은 데이터를 구성하고 액세스하는 데 있어 서로 다른 목적을 수행합니다.

List는 인덱스로 요소에 접근하는 순서가 있는 컬렉션입니다. 항목은 삽입 순서를 유지하며 중복이 허용됩니다:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Set은 고유한 요소들의 순서가 없는 컬렉션입니다. 중복된 요소를 추가하려고 하면 간단히 무시됩니다:

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)과 결합될 때 더욱 강력해지며, 향후 레슨에서 여러분의 커스텀 클래스와 함께 작동하는 타입 안정성이 보장된 컬렉션을 만드는 방법을 살펴보게 될 것입니다.

challenge icon

챌린지

쉬움

세 가지 컬렉션 타입을 모두 사용하여 학생 데이터를 다양한 방식으로 정리하는 교실 관리 시스템을 구축해 보겠습니다. 동일한 정보를 관리할 때 List, Set, Map이 각각 어떻게 고유한 목적을 수행하는지 확인하게 될 것입니다.

코드를 두 개의 파일로 구성합니다:

  • classroom.dart: 세 가지 컬렉션 타입을 사용하여 학생 데이터를 관리하는 Classroom 클래스를 생성합니다:
    • 학생들이 도착한 순서대로 추적하는 attendanceOrder라는 이름의 List<String> (한 학생이 여러 번 출석 체크를 한 경우 중복 허용)
    • 어떤 학생들이 출석했는지 추적하는 uniqueStudents라는 이름의 Set<String> (중복 없음)
    • 각 학생의 시험 점수를 저장하는 scores라는 이름의 Map<String, int>
    Classroom 클래스는 다음 메서드들을 가져야 합니다:
    • 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);  // 3

Set - 고유한 요소들로 이루어진 순서가 없는 컬렉션입니다. 중복은 자동으로 무시됩니다:

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()를 호출하여 강의실 데이터 표시
}
quiz icon실력 점검

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

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