안녕하세요. 도미닉입니다.
오늘은 클로저와 고차함수에 대해서 알아보겠습니다.
클로저란?
클로저는 기능을 갖는 독립적인 코드 블록입니다.
말이 조금 어려운데요.
기능을 갖는 코드 블록을 우리는 이미 알고 있습니다.
맞습니다. 함수입니다.
그렇다면 함수와 클로저의 차이는 무엇일까요?
아래 설명을 보시면 이해하실 수 있으실 겁니다.
클로저를 선언하는 방법은?
클로저는 선언하는 부분에서부터 함수와 차이점을 보입니다.
클로저는 함수와 달리 이름을 적지않습니다.
이름을 적지 않음으로써 아래와 같은 사실을 알 수 있습니다.
클로저는 선언해놓고 호출하는 방식이 아니라 필요할 때마다 코드 블록을 작성해야한다.
자주 사용하는 코드 블록을 선언해놓는 함수와 달리 매번 다른 코드 블록을 사용할 때 필요할 것 같다.
그렇다면 클로저를 사용하려면 매번 긴 코드 블록을 직접 작성해야할까요?
이러한 문제를 해결하기 위해 클로저는 축약형을 제공합니다.
아래 nameSorted1부터 nameSorted8 까지의 상수들은 모두 같은 순서의 배열을 갖습니다.
다만 애플은 축약형보다 풀어서 쓰는 것을 선호한다고 합니다.
클로저의 활용 방안은?
map 의 전달인자로 사용할 수 있습니다.
map 고차함수는 배열의 전체 요소들에 대해 동시에 더하기, 곱하기, 형변환 등의 작업을 할 때 사용할 수 있습니다.
만약 numbers 라는 배열이 있는데 각 요소에 3을 곱한 배열이 필요하다고 합시다.
아래처럼 배열을 초기화하고 for 문을 돌려서 threeTimesNumbers 배열을 채울 수 있을 것입니다.
이러한 상황에서 map 을 사용하면 한번에 그리고 상수 타입으로 배열을 저장할 수 있습니다.
스위프트는 변수보다 상수의 활용을 권장하기 때문에 이러한 점은 굉장한 메리트가 될 수 있습니다.
공식문서에 있는 예제입니다.
map 함수를 이용해 숫자를 문자열로 나타내도록 실행됩니다.
기준에 따라 합격 불합격을 저장할 수도 있습니다.
filter 의 전달인자로 사용할 수 있습니다.
filter 고차함수는 조건에 따라 배열의 요소를 추출하는데 사용합니다.
예를 들어 점수가 80점 초과인 요소들만 뽑아낼 수 있습니다.
짝수만 뽑아낼 수도 있습니다.
reduce 의 전달인자로 사용할 수 있습니다.
reduce 고차함수는 배열 요소의 총합, 전체 요소 빼기, 전체 요소 곱하기 등 전체 요소를 종합하는데 사용할 수 있습니다.
정리
이상으로 클로저에 대한 설명을 마치도록 하겠습니다.
클로저와 고차함수를 활용하면 for 문과 append, 변수의 사용을 줄일 수 있을 것입니다.
설명 중 틀린 점이나 궁금하신 점은 댓글로 남겨주시면 답변 드리도록 하겠습니다.
읽어주셔서 감사합니다.