Higher-Order Functions

봄이아빠·2024년 11월 15일
4

FP

목록 보기
2/2

Higher-Order Functions (고차 함수)

고차함수란 다음 두 가지 중 하나를 만족하는 함수입니다.

  1. 함수를 인자로 받는다.
  2. 함수를 반환한다.

이는 함수를 데이터처럼 다룬다는 아이디어를 기반으로 합니다.
함수가 일급 시민으로 간주되기 때문에 가능합니다.
일급 시민으로 간주된다는 것은 함수도 class나 struct처럼 간주될 수 있다는 것으로 외부 상태를 캡쳐하느냐에 따라 힙 또는 스택에 저장됩니다.
특정 로직을 일반화하고 추상화할 수 있으며 클로저와 자주 결합하여 사용합니다.

Types of Higher-Order Functions (고차 함수의 두 가지 유형)

Functions Taking Functions as Parameters (함수를 매개변수로 받는 함수)


간단한 사용법은 위와 같으며 좀 더 실사용적인 예시는 다음과 같습니다.

func animateView(_ view: UIView, completion: @escaping () -> Void) {
    UIView.animate(withDuration: 1.0, animations: {
        view.alpha = 0
    }, completion: { _ in
        completion()
    })
}

animateView(someView) {
    print("Animation finished. Performing next steps...")
}

위 코드는 애니메이션이 진행된 후의 동작을 정의해서 사용하고 있습니다.
상황에 따라 저런 프린트가 아닌 데이터를 업데이트하거나 화면전환을 시도하는 등 유연한 사용이 가능해집니다.
또 애니메이션의 경우 비동기로 작동하므로 완료 시점을 알아야 하는 상황에서도 유용합니다.

Functions Returning Functions (함수를 반환하는 함수)


위 코드처럼 함수를 반환하는 함수는 상황에 맞게 필요한 함수를 동적으로 만들 수 있습니다.


또는 이처럼 클로저 캡처를 활용하여 호출 횟수를 추적하는 등의 동작도 가능합니다.

In Swift

스위프트에서는 정말 다양한 고차함수를 표준라이브러리로 제공하고 있습니다.

  • map
  • compactMap
  • flatMap
  • reduce
  • enumrated
  • filter

이외에도 sorted(by:)나 forEach 등 다양한 것들이 있습니다.
컬렉션 타입과 결합하여 사용하는 경우가 많습니다.
for이나 if 문 대신 map, filter, reduce 등을 사용하여 코드의 간결성과 의도를 더 정확히 알 수 있는 가독성을 높일 수 있고
재사용성도 높습니다.

3개의 댓글

comment-user-thumbnail
2024년 11월 15일

오 고차함수~~!~! 저는 filter랑 reduce를 가장 좋아해여 걸러주고 더해주는거 코테에서 체고

1개의 답글