다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수
를 뜻한다.함수형 프로그래밍 (functional programming) 은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. - wiki
컴퓨터 프로그래밍 언어 디자인에서, 일급 객체 (first-class object) 란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다. - wiki
func half(num: Double) -> Double {
print(#function) // 표현식이 나타나는 선언부의 이름을 출력.
return num / 2
}
let half2 = half // 함수 half를 변수 half2에 저장
print(half(num:2.2))// half(num:_) 1.1
print(half2(2.2))// half(num:_) 1.1
#function
은 위 코드내 설명처럼 표현식이 나타나는 선언부(declaration)의 이름을 뜻하는 Special Literal
이다.half2
상수에 half
라는 함수 를 선언했다.half2
에 담긴 함수를 호출했다. 그 결과를 보면 변수에 저장 가능한 객체가 무엇을 의미하는지 알 수 있다.func half(num: Double) -> Double {
print(#function)
return num / 2
}
let half2 = half
func upDown(func:(Double) -> Double, value: Double) {
let result = func(value)
print(result)
}
upDown(func: half2, value:8.0) // half(num:) 4.0
upDown
함수에서 (Double) -> Double
타입의 함수(클로저) 를 매개변수 이름 func
으로 받는다.half(num:)
함수와 같은 자료형이므로 매개변수로 half(num:)
함수, half(num:)
함수가 담긴 half2
상수를 넣을 수 있다.upDown
함수가 호출될 때 내부 로직에서 func
매개변수를 호출하고 있으므로, half(num:)
함수가 호출되게 된다.
func half(num: Double) -> Double {
print(#function)
return num / 2
}
let half2 = half
func divideFunc() -> (Double) -> Double {
return half2
}
var divideValue = decideFun()
print(divideValue(1.5)) // half(num:) 0.75
divideFunc()
함수는 (Double) -> Double
타입 자료형을 반환한다.divideValue
변수에 받아 호출하니 half(num:)
함수가 호출된다.위키백과 - 함수형 프로그래밍
위키백과 - 일급 객체
Swift 일급객체(First-class object) 일급시민(First-class citizen)
함수와 일급 객체
정보통신기술용어해설