[Dart 언어강좌] 012. Dart에서 사용되는 콜렉션, 고차 함수와 필터링 매핑

Dart는 현대적인 프로그래밍 언어로, 다양한 기능과 강력한 콜렉션을 제공하여 개발자들이 효율적으로 코드를 작성할 수 있게 돕습니다. 이 글에서는 Dart에서 사용되는 콜렉션, 고차 함수 및 이러한 콜렉션을 필터링하고 매핑하는 방법에 대해 자세히 알아보겠습니다.

1. Dart의 콜렉션(Collection)

Dart에서 콜렉션은 여러 데이터를 구조적으로 저장하고 관리할 수 있는 데이터 타입입니다. Dart에서는 주로 List, Set, Map의 세 가지 주요 콜렉션 타입이 있습니다.

1.1. List

List는 순서가 있는 데이터의 모음으로, 동일한 데이터 타입을 가지며 인덱스를 통해 접근할 수 있습니다. 예를 들어, 정수형 데이터의 리스트는 다음과 같이 정의할 수 있습니다:

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

List의 주요 연산으로는 데이터 추가, 삭제, 검색 등이 있습니다. 아래는 List의 몇 가지 메서드 사용 예시입니다:

numbers.add(6); // 리스트에 6 추가
numbers.remove(2); // 리스트에서 2 제거
print(numbers.length); // 리스트의 길이 출력
print(numbers[0]); // 첫 번째 값 출력

1.2. Set

Set은 중복된 값을 허용하지 않는 데이터의 모임입니다. 데이터의 존재 여부를 빠르게 확인할 수 있는점이 특징입니다. Set은 다음과 같이 생성할 수 있습니다:

Set fruits = {'apple', 'banana', 'orange'};

Set의 주요 메서드 사용 예시는 다음과 같습니다:

fruits.add('kiwi'); // Set에 kiwi 추가
fruits.remove('banana'); // Set에서 banana 제거
print(fruits.contains('apple')); // apple이 포함되어 있는지 확인

1.3. Map

Map은 키-값 쌍으로 이루어진 콜렉션으로, 각 키는 고유해야 합니다. Map은 다음과 같이 정의할 수 있습니다:

Map scores = {'Alice': 90, 'Bob': 85};

Map에서 데이터를 조회하거나 수정하는 방법은 다음과 같습니다:

scores['Charlie'] = 95; // Charlie 추가
print(scores['Alice']); // Alice의 점수 출력
scores.remove('Bob'); // Bob 제거

2. 고차 함수(Higher-Order Functions)

고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수를 말합니다. Dart는 고차 함수를 매우 효율적으로 처리할 수 있는 기능을 제공합니다. 예를 들어, 리스트의 각 요소에 특정 함수를 적용하는 map 함수를 사용해 보겠습니다:

List square(List numbers) {
    return numbers.map((number) => number * number).toList();
}

List numbers = [1, 2, 3, 4, 5];
print(square(numbers)); // [1, 4, 9, 16, 25] 출력

위의 예제에서 map 메서드는 각 요소에 제공된 함수를 적용하여 새 리스트를 반환합니다.

3. 필터링(Filtering)과 매핑(Mapping)

필터링과 매핑은 데이터를 변환하고 선택하는 데 매우 유용한 기능입니다. Dart의 콜렉션에서 where 메서드를 사용해 필터링을, map 메서드를 사용해 매핑을 할 수 있습니다.

3.1. 필터링

필터링은 특정 조건을 만족하는 요소만 선택하는 과정을 의미합니다. 예를 들어, 짝수만 골라내는 필터링을 구현해 보겠습니다:

List getEvenNumbers(List numbers) {
    return numbers.where((number) => number % 2 == 0).toList();
}

List numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
print(getEvenNumbers(numbers)); // [2, 4, 6, 8, 10] 출력

3.2. 매핑

매핑은 컬렉션의 각 요소를 다른 요소로 변환하는 과정을 의미합니다. 위에서 사용한 map 메서드가 그 예입니다. 다음은 문자열 리스트를 대문자로 변환하는 예입니다:

List toUpperCase(List strings) {
    return strings.map((string) => string.toUpperCase()).toList();
}

List fruits = ['apple', 'banana', 'orange'];
print(toUpperCase(fruits)); // ['APPLE', 'BANANA', 'ORANGE'] 출력

4. 결론

Dart에서 제공하는 콜렉션, 고차 함수, 필터링 및 매핑은 개발자가 효율적이고 가독성이 높은 코드를 작성하는 데 큰 도움을 줍니다. Dart의 다양한 콜렉션 타입과 강력한 함수형 프로그래밍 기능을 사용하면 복잡한 데이터 처리 작업을 간결하게 수행할 수 있습니다. 앞으로 Dart를 사용하여 더 많은 프로젝트를 진행해 보시길 권장합니다.