guricode

Dart 간단 정리 - 컬렉션 고차 함수 본문

앱/Flutter&Dart

Dart 간단 정리 - 컬렉션 고차 함수

agentrakugaki 2025. 6. 24. 20:47

Dart에서 List, Set, Map 같은 컬렉션 타입 데이터를 다룰 때 자주 사용하는 고차 함수들이 있다. 고차 함수는 '함수를 매개변수로 받거나 반환하는 함수'로, 데이터를 가공하거나 필터링하거나 누적 처리할 때 유용하게 사용된다. 각 함수의 특징을 확인해보자.


 map()

 

  • 각 요소에 특정 함수를 적용해 새로운 컬렉션을 반환한다.
  • 원본 데이터를 변경하지 않고, 반환되는 컬렉션의 크기는 원본과 같다.
  • Iterable 타입으로 반환된다.

예시

List<String> fruits = ['사과', '오렌지', '수박'];
var delicious = fruits.map((fruit) => '맛있는 $fruit');
print(delicious); // (맛있는 사과, 맛있는 오렌지, 맛있는 수박)

List<int> numbers = [1, 2, 3];
var doubled = numbers.map((n) => n * 2);
print(doubled); // (2, 4, 6)

where()

 

  • 조건을 만족하는 요소들만 필터링해 새로운 컬렉션으로 반환한다.
  • 조건을 만족하는 요소가 없으면 빈 컬렉션을 반환한다.
  • 원본 데이터를 변경하지 않는다.

예시

List<int> numbers = [1, 2, 3, 4, 5];
var even = numbers.where((n) => n.isEven);
print(even); // (2, 4)

var none = numbers.where((n) => n > 10);
print(none); // ()

firstWhere()

 

  • 조건을 만족하는 요소 중 첫 번째 요소를 반환한다.
  • 조건을 만족하는 요소가 없으면 오류를 발생시킨다.

예시

List<int> numbers = [1, 2, 3, 4];
var result = numbers.firstWhere((n) => n > 2);
print(result); // 3

// var error = numbers.firstWhere((n) => n > 10); // 오류 발생

lastWhere()

  • 조건을 만족하는 요소 중 마지막 요소를 반환한다.
  • 조건을 만족하는 요소가 없으면 오류를 발생시킨다.

예시

List<int> numbers = [1, 2, 3, 4];
var result = numbers.lastWhere((n) => n < 4);
print(result); // 3

 reduce()

 

  • 컬렉션의 모든 요소를 하나의 값으로 결합한다.
  • 첫 번째 요소를 초기값처럼 사용한다.
  • 빈 컬렉션이면 오류가 발생한다.
  • 반환 타입은 요소의 타입과 같아야 한다.

예시

List<int> numbers = [1, 2, 3, 4, 5];
var sum = numbers.reduce((a, b) => a + b);
print(sum); // 15

fold()

어떤 함수인가요?

  • reduce와 유사하지만, 초기값을 직접 지정할 수 있다.
  • 반환 타입이 자유롭다.
  • 빈 컬렉션이어도 초기값으로 연산을 시작할 수 있다.

예시

List<int> numbers = [1, 2, 3];
var result = numbers.fold(10, (a, b) => a + b);
print(result); // 16

any()

어떤 함수인가요?

  • 하나라도 조건을 만족하면 true를 반환한다.
  • 모두 만족하지 않으면 false를 반환한다.

예시

List<int> numbers = [1, 2, 3];
print(numbers.any((n) => n > 2)); // true
print(numbers.any((n) => n > 10)); // false

every()

어떤 함수인가요?

  • 모든 요소가 조건을 만족하면 true를 반환한다.
  • 하나라도 만족하지 않으면 false를 반환한다.

예시

List<int> numbers = [2, 4, 6];
print(numbers.every((n) => n % 2 == 0)); // true
print(numbers.every((n) => n < 6)); // false

takeWhile()

어떤 함수인가요?

  • 조건이 참인 동안 요소들을 반환한다.
  • 조건이 처음으로 거짓이 되는 순간부터 이후 요소들은 모두 제외된다.

예시

List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.takeWhile((n) => n < 4);
print(result); // (1, 2, 3)

skipWhile()

어떤 함수인가요?

  • 조건이 참인 동안 요소들을 건너뛴다.
  • 조건이 처음으로 거짓이 되는 순간부터 끝까지의 요소들을 모두 반환한다.

예시

List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.skipWhile((n) => n < 4);
print(result); // (4, 5)

reduce vs fold 차이 정리

항목 reduce() fold()

초기값 첫 번째 요소 직접 지정
빈 컬렉션 오류 발생 OK (초기값 사용)
타입 유연성 없음 (고정) 있음 (자유롭게 변환 가능)

각 함수는 상황에 맞게 데이터를 처리하는 데 유용하다. 특히 map, where, reduce, fold는 자주 쓰이는 만큼 충분히 익혀두자.