-시작하며-
필자는 코틀린을 주로 사용했기 때문인지 이렇게 언어들을 배울 때 기본적인 변수생성이나 클래스 같은 여러 규칙들을 보고 나면 코틀린의 map이나 groupBy, forEach 같은 Collection과 Iterable을 다루는 데 도움을 주는 여러 함수들을 찾아보곤 합니다. 그러므로 오늘은 Dart의 고차 함수들에 대해서 알아봅시다.
Collection과 Iterable을 사용하는 함수들은 여러 연속적이거나 set이나 map 같은 연속적이지 않더라도 여러 데이터 묶음들이 담긴 Collection들을 다루는 함수들입니다. 대부분의 앱이나 프로그램의 특성상 많은 종류의 데이터들을 다루게 됩니다. 이런 데이터들은 Collection에 넣어 관리를 하는데 이렇게 Collection들을 관리를 하는데 언어자체에서 도와주는 이런 함수들이 많기 때문에 이런 함수 들은 알아두면 쉽게 개발을 할 수 있을 것입니다.
-본문-
필터링 함수
where()
주어진 조건에 따라 컬렉션의 요소를 필터링하여 새로운 컬렉션을 생성합니다.
var numbers = [1, 2, 3, 4, 5];
var evenNumbers = numbers.where((number) => number % 2 == 0);
print(evenNumbers); // 출력: (2, 4)
변환 함수
map()
주어진 변환 함수를 각 요소에 적용하여 새로운 컬렉션을 생성합니다.
var numbers = [1, 2, 3, 4, 5];
var squaredNumbers = numbers.map((number) => number * number);
print(squaredNumbers); // 출력: (1, 4, 9, 16, 25)
축소 함수
fold()
초기값과 조합 함수를 사용하여 컬렉션의 요소를 반복적으로 결합하여 단일 값으로 축소합니다.
var numbers = [1, 2, 3, 4, 5];
var sum = numbers.fold(0, (previous, current) => previous + current);
print(sum); // 출력: 15
reduce()
조합 함수를 사용하여 컬렉션의 요소를 순차적으로 결합하여 단일 값으로 축소합니다.
var numbers = [1, 2, 3, 4, 5];
var product = numbers.reduce((previous, current) => previous * current);
print(product); // 출력: 120
순회 함수
forEach()
컬렉션의 각 요소에 대해 주어진 동작을 수행합니다.
var numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) => print(number));
// 출력:
// 1
// 2
// 3
// 4
// 5
조건 확인 함수
any()
주어진 조건을 만족하는 요소가 컬렉션에 있는지 확인합니다.
var numbers = [1, 2, 3, 4, 5];
var hasEvenNumber = numbers.any((number) => number % 2 == 0);
print(hasEvenNumber); // 출력: true
every()
컬렉션의 모든 요소가 주어진 조건을 만족하는지 확인합니다.
var numbers = [1, 2, 3, 4, 5];
var allPositive = numbers.every((number) => number > 0);
print(allPositive); // 출력: true
정렬 함수
sort()
컬렉션의 요소를 정렬합니다.
var numbers = [5, 2, 4, 1, 3];
// 순서대로 정렬
numbers.sort();
print(numbers); // 출력: [1, 2, 3, 4, 5]
// 역순으로 정렬
numbers.sort((a, b) => b.compareTo(a));
print(numbers); // 출력: [5, 4, 3, 2, 1]
// 절대값에 기반한 정렬
numbers.sort((a, b) => a.abs().compareTo(b.abs()));
print(numbers); // 출력: [1, 2, 3, 4, 5]
기타 함수
skip()
주어진 개수만큼 컬렉션의 요소를 건너뜁니다.
var numbers = [1, 2, 3, 4, 5];
var skippedNumbers = numbers.skip(2);
print(skippedNumbers); // 출력: (3, 4, 5)
take()
주어진 개수만큼 컬렉션의 요소를 선택합니다.
var numbers = [1, 2, 3, 4, 5];
var selectedNumbers = numbers.take(3);
print(selectedNumbers); // 출력: (1, 2, 3)
toList()
Iterable을 List로 변환합니다.
var numbers = [1, 2, 3, 4, 5];
var numberList = numbers.toList();
print(numberList); // 출력: [1, 2, 3, 4, 5]
toSet()
Iterable을 Set으로 변환합니다.
var numbers = [1, 2, 2, 3, 4, 5, 5];
var numberSet = numbers.toSet();
print(numberSet); // 출력: {1, 2, 3, 4, 5}
-마치며-
저도 Kotlin으로 코딩을 해보았지만 이번에 Dart로 Collection 관련함수들을 공부하면서 기존에 코딩할 때 잊고 있던 여러함들을 기억할 수 있어서 좋은 기회가 되었던 것 같습니다.
참고 :
https://dart.dev/codelabs/iterables
'Flutter > Dart' 카테고리의 다른 글
[Dart] 비동기 작업 클래스, Future (0) | 2023.06.12 |
---|---|
[Dart] Cascade Operator 와 Spread Operator (0) | 2023.06.10 |
[Dart] Dart를 알아봅시다 (0) | 2023.06.08 |