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

🌈 devleeky16498·2022년 4월 12일
0

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

함수 타입의 사용

  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개의 댓글

관련 채용 정보