일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 열거형
- 인스펙터
- TableView
- switch
- SeSAC
- xcode
- 옵셔널 체이닝
- 패스트캠퍼스후기
- 직장인인강
- 패스트캠퍼스
- 프로퍼티 관찰자
- Git
- 문자열 보간법
- beginAsyncWrite
- 기본문법
- enum
- Background
- Realm
- userDefaults
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- 독학
- ios
- swift
- cancelAsyncWrite
- 패캠챌린지
- 직장인자기계발
- RawValue
- 함수
- Threading
- Optional Chaining
- Today
- Total
아삭아삭 iOS 개발
[Swift 독학] 패스트캠퍼스 챌린지 12일차_함수(Functions)는 일급객체 본문
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] 참조하여 공부)
본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[Swift 독학] 패스트캠퍼스 챌린지 14일차_반복문 (0) | 2022.02.06 |
---|---|
[Swift 독학] 패스트캠퍼스 챌린지 13일차_조건문 (0) | 2022.02.05 |
[Swift 독학] 패스트캠퍼스 챌린지 11일차_함수(Functions) 선언 (0) | 2022.02.03 |
[Swift 독학] 패스트캠퍼스 챌린지 10일차_함수(Functions) 정의와 특징 (0) | 2022.02.02 |
[Swift 독학] 패스트캠퍼스 챌린지 9일차_컬렉션 타입 (0) | 2022.02.01 |