아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 12일차_함수(Functions)는 일급객체 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 12일차_함수(Functions)는 일급객체

바닐라머스크 2022. 2. 4. 23:44

swift 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이기 때문에

swift의 함수는 일급객체(first-class object)이다.

 

일급 객체의 조건

1) 객체는 런타임에도 생성 가능
2)
객체를 인자 값으로 전달 가능
3)
객체를 return값으로 반환 가능
4)
데이터 구조내 저장 가능

 

■ swift의 함수는 일급객체(first-class object)이다.

특징1>  함수 자체를 변수, 상수 등에 할당(=대입) 있음
- 아래 예제에서 addTwoInts(_ : _ : ) 함수는 mathFunction 변수와 동일한 타입이므로 변수에 할당이 가능
- mathFunction
할당된 함수를 호출할 수도 있음
- 즉, 비함수 타입과 동일한 방식으로 같은 타입 갖는 다른 함수는 해당 변수에 할당할 있음

func addTwoInts(_ a: Int, _ b: Int) -> Int {
       return a + b
}

func multiplyTwoInts(_ a: Int, _ b: Int) -> Int {
       return a * b
}

var mathFunction: (Int, Int) -> Int = addTwoInts   // 변수에 함수 할당

print(“Result: \(mathFuntion(2, 3)))     // 변수에 할당된 함수 호출

let anotherMathFunction = addTwoInts     // 상수에 함수 할당(이때 변수와 상수는 같은 (Int, Int) -> Int 임을 예상 가능

 

특징2>  함수 자체를 매개변수(인자) 전달할 있음

- 함수는 다른 함수를 인수 하나로 가질 있음

- 아래 예제에서 printMathResult라는 함수는 3개의 매개변수를 갖는데, 번째 인자의 타입은 (Int, Int) -> Int 이고 번째와 번째 타입은 Int. 만약 (Int, Int) -> Int 동일한 타입을 갖는 함수 있다면 첫번째 파라미터의 인수로 함수를 전달 가능.
- 실제로 printMathResult 함수를 호출할때 addTwoInts(_ : _ : )함수를 번째 인수로 전달하고 있음
- 즉, 함수 자체를 인자로 전달할 함수의 올바른 타입 중요함!!

func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
      print(“Result: \(mathFunction(a, b)))
}

printMathResult(addTwoInts, 3, 5)   // 함수 addTwoInts를 첫 번째 인자로 전달

 

특징3>  함수 자체를 return값으로 반환할 있음

- 함수가 다른 함수를 값으로 반환할 있음
-
반환하는 함수 구문에서 ‘->' 뒤에 완전한 함수 타입 작성해주어야

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

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

func chooseStepFunction(backward: Bool) -> (Int) -> Int {
       return backward ? stepBackward : stepForward
}   //  stepBackward함수 혹은 stepForward함수를 반환

 

 

 

 fast campus강의  참조자료

[1] https://alohalimi.tistory.com/entry/SWIFT-함수는-일급객체이다

[2] https://duwjdtn11.tistory.com/466#2.-함수

[3] https://bbiguduk.gitbook.io/swift/welcome-to-swift/swift-a-swift-tour#functions-and-closures

[4] https://bbiguduk.gitbook.io/swift/language-guide-1/functions

     (일급객체 특징 3가지의 예제는 [4] 참조하여 공부)

 

 

본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.