[Swift] 1급 객체(First class citizen)와 고차함수(고계함수)

Apr 16, 2022
[Swift] 1급 객체(First class citizen)와 고차함수(고계함수)
프로그래밍 언어에서 1급 객체란 아래의 조건을 충족시키면 됩니다.
1. 변수나 데이터에 할당 할 수 있어야 한다.
2. 객체의 매개변수로 넘길 수 있어야 한다.
3. 객체의 반환값으로 리턴 할수 있어야 한다.
 
Swift 기본타입들(Int, Bool, Struct, ...)은 물론 1급 객체이고,
함수 또한 1급 객체로 취급이 됩니다.
 

1. 변수나 데이터에 할당

// Int형 파라메터 2개를 받아서 Int를 반환하는 함수형을 선언 var mathFunction: (Int,Int) ->Int// Int값 두 개를 입력받고 Int를 반환하는 함수 funcaddTwoInts(_ a:Int,_ b:Int) ->Int { return a + b } // addTwoInts함수를 mathFunction변수에 할당 mathFunction = addTwoInts(_:_:)
 

2. 객체의 매개변수로 함수를 넘기기

// Int를 받아서 Int를 반환하는 함수형 선언 var someFunction: (Int) ->Int// 함수 funcincreamenter(input :Int) ->Int { return input*5 } // someFunction 변수에 increamenter함수를 할당 someFunction = increamenter(input:) // 함수를 매개변수로 받는 함수 funcfunctionParameter(f: (Int) ->Int) ->Int { return f(5) } // functionParameter(f: someFunction) // 25
 

3. 객체의 반환값으로 함수를 반환

// 반환형으로 쓰기 위한. 입력한 스텝에 하나를 빼거나 더하는 함수 funcstepForward(_ input:Int) ->Int { return input + 1 } funcstepBackward(_ input:Int) ->Int { return input - 1 } // backward함수가 true냐 false냐에 따라 위에서 선언한 적절한 함수를 반환하는 함수 funcchooseStepFunction(backward:Bool) -> (Int) ->Int { return backward ? stepBackward : stepForward } // 사용 예시 var currentValue = 3 let moveNearerToZero = chooseStepFunction(backward: currentValue > 0) // moveNearerToZero는 이제 stepBackward() 함수를 가르키고 있음. // moveNearerToZero를 호출할 때마다 // stepBackward() 함수가 호출돼 입력 값이 1씩 줄어들어 결국 0이 됨 print("Counting to zero:") // Counting to zero: while currentValue != 0 { print("\(currentValue)... ") currentValue = moveNearerToZero(currentValue) } print("zero!") // 3... // 2... // 1... // zero!
 

고차함수

위처럼 함수를 매개변수로 받거나, 반환값으로 갖는 함수를 고차함수(혹은 고계함수)라고 부릅니다.
Share article

iOS.dev