Dart Collections & Data Structures

Dart에서는 다양한 컬렉션과 데이터 구조를 제공하여 데이터를 효율적으로 관리하고 처리할 수 있습니다. 이들은 기본 데이터 구조인 List, Set, Map을 포함하여, 다양한 기능을 지원하는 Iterable과 Iterator 등으로 구성됩니다.

1. List (목록)

Dart의 List는 순서가 있는 데이터 컬렉션입니다. 배열과 유사하지만 크기가 동적으로 조정될 수 있습니다.

// List 생성
List<int> numbers = [1, 2, 3, 4, 5];

// 요소 추가
numbers.add(6);

// 요소 접근
print(numbers[0]); // 1 출력

// 리스트 순회
for (var num in numbers) {
  print(num);
}

2. Set (집합)

Set은 중복을 허용하지 않고 순서가 없는 컬렉션입니다.

// Set 생성
Set<String> names = {'Alice', 'Bob', 'Charlie'};

// 요소 추가
names.add('Alice'); // 이미 존재하는 요소는 추가되지 않음

// 요소 접근 (순서가 없으므로 인덱스로 접근 불가)
for (var name in names) {
  print(name);
}

3. Map (맵)

Map은 키-값 쌍으로 이루어진 데이터 구조입니다.

// Map 생성
Map<String, int> scores = {
  'Alice': 95,
  'Bob': 80,
  'Charlie': 75,
};

// 요소 추가
scores['David'] = 88;

// 요소 접근
print(scores['Alice']); // 95 출력

// Map 순회
scores.forEach((key, value) {
  print('$key\'s score is $value');
});

4. Iterable과 Iterator

Dart에서는 Iterable이라는 추상 클래스를 통해 컬렉션을 순회할 수 있습니다. Iterable은 데이터의 요소들을 차례로 접근할 수 있는 방법을 제공하며, Iterator를 사용하여 이를 실제로 수행합니다.

List<int> numbers = [1, 2, 3, 4, 5];

// Iterable을 이용한 순회
for (var number in numbers) {
  print(number);
}

// Iterator를 이용한 순회
Iterator<int> iterator = numbers.iterator;
while (iterator.moveNext()) {
  print(iterator.current);
}

5. 다양한 기능과 메서드

Dart의 컬렉션은 다양한 유용한 메서드와 기능을 제공하여 데이터 처리를 간편하게 할 수 있습니다. 예를 들어, 리스트와 세트는 add, remove, contains와 같은 메서드를 통해 데이터를 추가, 삭제하거나 포함 여부를 확인할 수 있습니다. 맵은 keys, values와 같은 메서드를 통해 키와 값을 관리하며, forEach 메서드를 사용하여 각 요소에 접근할 수 있습니다.

List<int> numbers = [1, 2, 3, 4, 5];
numbers.add(6); // 리스트에 요소 추가
numbers.remove(2); // 리스트에서 요소 제거

Set<String> names = {'Alice', 'Bob', 'Charlie'};
names.contains('Alice'); // 집합에 요소 포함 여부 확인

Map<String, int> scores = {'Alice': 95, 'Bob': 80, 'Charlie': 75};
scores['David'] = 88; // 맵에 새로운 요소 추가
scores.forEach((key, value) {
  print('$key\'s score is $value');
});

이러한 Dart의 컬렉션과 데이터 구조를 통해 데이터를 효율적으로 조작하고 관리할 수 있으며, 다양한 데이터 처리 작업을 수행할 수 있습니다. 각 데이터 구조의 특성을 잘 이해하고, 적절히 활용하여 프로그래밍을 진행하는 것이 중요합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *