728x90
반응형
안녕하세요 🐶
빈 지식 채우기의 비니🙋🏻♂️ 입니다.
오늘은 일급객체 ( First-Class Object ) 대해 알아보는 시간을 가지겠습니다.
1. 개요
Swift는 함수형 프로그래밍을 따르고 있습니다.
고로! Swift라는 언어는 일급 객체 ( First-Class Object) 에 부합하는 언어라고 할 수 있습니다.
바로 설명에 들어가도록 하겠습니다~
2. 일급 객체
일급 객체? 2급도 있고 3급도 있나? ㅎㅎㅎ 껄껄s~~
앜ㅋㅋㅋㅋㅋㅋㅋㅋ 네 ... 죄송합니다ㅋㅋ
정확히 아래의 조건을 충족한다면 일급 객체라고 할 수 있습니다!
1. 객체가 런타임에도 생성 가능하다.
2. 객체를 인자 값으로 전달할 수 있어야 한다.
3. 객체를 반환 값으로 사용할 수 있어야 한다.
4. 데이터 구조 안에 저장할 수 있어야 한다.
설명만으로는 이해가 안되실 수 있습니다. 바로 예시를 통해 알아보도록 하겠습니다!
2-1. 변수에 함수 대입 가능
일급 객체의 첫 번째 특성은 변수와 상수에 함수를 대입할 수 있습니다.
아래 코드를 확인하면 정의된 변수(상수)에 함수 자체를 할당하는 것을 볼 수 있습니다.
func getName(name: String) -> String {
return name
}
// 상수에 함수가 호출된 결과를 할당
let name = getName(name: "비니") // (1)
// 상수에 함수 자체를 할당
let nameFun = getName(name:) // (2)
print(name)
print(nameFun)
- 함수의 결과를 변수에 할당합니다.
- 함수 자체를 변수에 할당합니다.
일급 객체는 변수와 상수에 함수를 대입할 수 있다!
2-2. 함수를 반환 가능
일급 객체의 두 번째 특성은 반환 값으로 상수 및 데이터가 아닌 함수 자체를 반환 할 수 있습니다.
아래 코드를 확인하면 함수 자체를 반환하는 것을 볼 수 있습니다.
// 더하기 함수 선언
func plus( a:Int, b: Int) -> Int {
return a + b
}
// 더하기 함수를 반환하는 함수 선언
func setPlus(a:Int, b: Int) -> (Int, Int) -> Int {
return plus // (1)
}
let onPlus = setPlus(a: 1, b:2) // (2)
print(onPlus(1, 2))
print(setPlus(a: 1, b: 2)(3, 2)) // (3)
- 함수를 반환하는 함수를 생성합니다.
- plus 함수를 변수에 할당합니다.
- 메서드 체이닝을 통해서도 간편하게 사용 가능합니다.
일급 객체는 함수 자체를 반환 값으로 사용할 수 있다!
2-3. 파라미터로 함수를 전달 가능
일급 객체의 세 번째 특성은 파라미터 값으로 함수를 전달 할 수 있습니다.
아래 코드를 확인하면 파라미터로 함수를 전달하는 것을 볼 수 있습니다.
// 덧셈 함수 선언
func plus( a:Int) -> Int {
return a + 1
}
// (Int) -> Int 형태에 파라미터를 받는다.
func setPlus(a:Int, fn: (Int) -> Int) -> Int { // (1)
return fn(a) // (2)
}
// plus 함수를 전달한다.
print(setPlus(a: 1, fn: plus))
- (Int) -> Int 형태의 파라미터를 받는 함수를 생성한다.
- 두 번째 특성인 함수 자체를 반환한다.
일급 객체는 파라미터 값으로 함수를 전달을 할 수 있다!
이상으로 일급객체 ( First-Class Object ) 포스팅을 마치겠습니다.
틀린 부분이나 궁금한 사항은 댓글 남겨주세요~
참고
728x90
반응형
'iOS 🖥️ > Swift' 카테고리의 다른 글
[ Swift ] Expandable UITableView 만들기 (2) | 2023.05.23 |
---|---|
[ RxSwift ] Observable & Subscribe (0) | 2023.05.09 |
[ Swift ] 제네릭 ( Generic ) (0) | 2023.01.10 |
[ Swift ] KVC(Key-Value-Coding), KVO(Key-Value-Observing) (0) | 2023.01.05 |
[ Swift ] 서브스크립트 ( Subscript ) (0) | 2022.12.30 |