6-3. 함수 타입(function type)

🌈 devleeky16498·2022년 4월 12일

스위프트의 모든 함수는 파라미터 타입과 반환 타입으로 구성된 특정 함수 타입이 있다.

함수 타입의 사용

  1. 모든 함수는 파라미터 타입과 반환타입으로 구성된 특정 함수 타입을 가지고 있다.
func printHelloWorld() {
	print("Hello, world")
}
//다음 예제는 파라미터 또는 반환값이 없는 함수인데, 
//이 함수의 타입은 () -> Void 또는 함수는 파라미터가 없고 Void를 반환한다 라고 말한다.
  1. 스위프트에서는 다른 타입처럼 함수 타입을 사용한다. 예를 들어서 함수타입에 대해서 상수 또는 변수로 함수 타입을 할당 가능하다. 예시의 경우 addTwoInts(::)함수는 aFunction이라는 변수와 같은 타입이기 때문에 타입검사기는 할당을 허락한다.
var aFunction : (Int, Int) -> Int = addTwoInts
//이 친구는 이렇게 읽힌다. "2개의 Int값과 Int를 반환하는 함수타입을 가지는 aFunction이라는 변수를 정의한다. addTwoInts라는 함수를 참조하기 위해서 새로운 변수에 설정하세요."

print("Result: \(aFunction(2, 3)")
//다음과 같이 해주게 되면 5를 반환한다. 
  1. 파라미터 타입으로의 함수타입의 사용 또한 가능하다. (Int, Int) -> Int와 같은 함수타입을 다른 함수의 파라미터로 사용 가능하다. 이렇게 하면 함수 호출자가 함수가 호출될 때 제공할 함수 구현의 일부를 남길 수 있다.
func printMathResult(_ aFunction: (Int, Int) -> Int, _ a : Int, _ b : Int) {
	print("Result: \(mathFunction(a, b))")
}
//함수타입을 파라미터로 전달하여 함수를 호출할 수 있다.
printMathResult(addTwoInts, 3, 5)
//다음과 같이 함수 타입을 통째로 넘겨서 함수안에서 함수를 구현 가능하다.
  1. 반환 타입으로 함수타입이 있다. 다른 함수의 반환 타입으로 함수 타입 사용이 가능하다. 반환하는 함수의 반환 화살표 -> 바로 뒤에 완전한 함수타입을 작성하고 이를 수행한다.
func stepForward(_ input: Int) -> Int {
	return input + 1
}

func stepBackward(_ input : Int) -> Int {
	return input - 1
}

func chooseStepFunction(backword : Bool) -> (Int) -> Int {
	return backward ? stepBackword : stepForward
}
//다음 함수의 반환타입은 다소 복잡하게 보인다. 이는 Int타입을 파라미터로 받아서 Int를 반환하는 함수타입을 반환한다는 의미이다. 
//첫 화살표 뒤 부분이 기본적인 반환의 기준이 되는 지점이다.
  1. 마지막으로 중첩함수가 있다. 이는 함수 내에서 함수를 선언하여 활용하는 것이다.
func chooseStepFunction(backward : Bool) -> (Int) -> Int {
	func stepForward(input : Int) -> Int {return input + 1}
    func stepBackword(input : Int) -> Int {return input - 1}
    return backward ? stepBackward : stepForward
}
profile
Welcome to Growing iOS developer's Blog! Enjoy!🔥

0개의 댓글