이번에는 고차 함수에 대해서 확인을 해보도록 하자.
고차 함수
- 다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수
- Swift의 함수는 일급 객체이기 때문에 함수에 전달 인자로 전달할 수 있고, 함수의 결과 값을 반환할 수도 있다.
- Swift에서 제공하는 고차 함수는 map, filter, reduce 3가지가 있고, 모두 컬렉션 타입에 구현이 되어 있다.
대략적인 고차함수의 정의에 대해 알아봤다.
이 내용을 토대로 고차 함수의 종류를 하나씩 살펴보도록 하자.
map
- 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너를 생성한다.
- 자신을 호출할 때에 매개변수로 전달된 함수를 실행하여 그 결과값을 다시 반환해준다.
상수 numbers 배열을 선언하였고, 배열의 초기값으로 2, 4, 6, 8을 대입하였다.
map 고차 함수를 이용하여 numbers의 array를 불러와 3씩 곱해준 값을 가져와서 mapTest에는 배열의 변수에 3이 곱해진 배열이 새로 생성이 된다.
이렇게 mapTest를 실행한 경우에 기존 numbers의 배열에 3씩 곱해준 6, 12, 18, 24 로 새로운 배열이 생성된다는 내용이다.
filter
- 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출한다.
- map과 마찬가지로 새로운 컨테이너에 걸러진 값들을 담아 반환한다.
- map과의 차이점은 map은 기존 요소를 변경한 값을 return 하고, filter는 특정 기준에 맞는 기준 값들을 return 한다.
상수 numbers2의 배열을 만들었고, 배열에 10, 11, 20, 21, 30, 31, 40, 41로 초기화를 해줬다.
이후 필터 함수를 이용하여 배열의 요소로 접근을 해서 홀수인 경우를 제외하고 filterTest 상수에 대입이 된다.
이전글에서 진행했던 대로 클로저의 간소화 방법으로 작성을 진행했다.
filter를 print했을 경우에 짝수의 내용만 filterTest에 대입된 것을 확인할 수 있다.
이렇게 filter를 사용하면 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출할 수 있다.
reduce
- 컨테이너 내부의 요소를 하나로 통합시킨다.
- 만약 배열이라면 배열의 모든 값을 전달 인자로 전달받아 클로저의 연산 결과로 합해주게 된다.
상수 numbers3 배열을 1,3,5,7,9로 초기화를 시켜줬다. 그리고 reduce 고차 함수를 이용해 값을 더해준다.
우선 reduce의 첫 번째 매개변수의 값을 0으로 설정을 하였고, 결과값 result 를 int, 배열의 요소를 받을 변수 number를 받는 클로저를 만들었고, result는 누적값을 의미한다.
클로저가 실행될 때마다 하나씩 배열의 값을 가져와서 더해준 부분을 확인할 수 있다. 필자의 경우에는 중간에 print 되는 내용을 확인하기 위하여 print 구문을 사용했음으로 단일 return 이 아니라 클로저의 간소화를 일부만 진행한 것을 확인할 수 있다.
추가적으로 number3.reduce(0)이 아니라 number3.reduce(4)로 진행할 경우에는 초기값이 4이기 때문에 4+1 부터 진행을 한다.
해당 내용도 변경해서 실행을 해보면 좋을것 같다.
'APPLE > Swift 문법' 카테고리의 다른 글
[ 기초 문법 ] Closure (0) | 2022.08.24 |
---|---|
[ 기초 문법 ] try-catch (0) | 2022.08.24 |
[ 기초 문법 ] 옵셔널 체이닝 (0) | 2022.08.23 |
[ 기초 문법 ] 열거형 (0) | 2022.08.22 |
[ 기초 문법 ] Extension (0) | 2022.08.22 |