1. 변수나 상수에 함수를 대입할 수 있다.
func foo(base: Int) -> String {
  print("함수 foo가 실행됩니다.")
  return "결과 값은 \\(base + 1) 입니다."
}

let fn2: (Int) -> String = foo
fn2(5) // 결과 값은 6 입니다.

출력 결과

함수 foo가 실행됩니다.
  1. 함수의 반환 타입으로 함수를 사용 할 수 있다.
func plus(a: Int, b: Int) -> Int {
  return a + b
}

func calc(_ operand: String) -> (Int, Int) -> Int {
  switch operand {
  case "+":
    return plus
  default:
    return plus
  }
}

let operand: (Int, Int) -> Int = calc("+")
operand(3, 4) // 7
  1. 함수의 인자값으로 함수를 사용 할 수 있다.
func increment(param: Int) -> Int {
  return param + 1
}

func broker(base: Int, function fn: (Int) -> Int) -> Int {
  return fn(base)
}

let x = broker(base: 4, function: increment)
print(x) // 5
  1. 함수 내에 다른 함수를 정의해서 사용 할 수 있습니다. → 중첩 함수 (Nested Functions)
func outer(base: Int) -> String {
  
  func inner(inc: Int) -> String {
    return "\\(inc)를 반환"
  }

  return inner(inc: base + 1)
}

let y = outer(base: 4)
print(y) // 5를 반환

내부함수는 외부함수의 실행과 종료에 생성되었다 사라집니다.

일급 함수의 특성

  1. 인자값과 반환값으로 함수 전달 가능
  2. 변수나 구조체 안에 객체 저장 가능
  3. 런타임에도 객체 생성 가능