본문 바로가기

Swift

First-Class Citizen(일급 객체)

728x90

Swift는 함수형 패러다임을 따르고 있다.

Swift는 다중 패러다임 프로그래밍 언어이며, 아래와 같은 프로그래밍 패러다임을 차용하고 있습니다.
- 명령형 프로그래밍 패러다임
- 객체지향 프러그래밍 패러다임
- 함수형 프로그래밍 패러다임
- 프로토콜 프로그래밍 패러다임

즉, Swift라는 언어는 일급 객체(First-Class Citizen)에 부합하는 언어이다.

 

공식문서를 살펴보면 Swift에서 함수는 일급 객체이기 때문에 함수를 변수, 상수, 매개변수에 넣을 수 있다고 한다.

그렇다면 여기서 일급 객체란 무엇일까?

 

일급 객체

일급 객체란 아래 세 가지 조건을 만족하는 객체를 의미한다.

특별한 용도, 혜택이 있다는 것이 아니라 사용할 때 다른 요소들과 아무런 차별 없이 사용할 수 있는 객체이다.

  1. 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있다.
  2. 모든 일급 객체는 함수의 반환 값이 될 수 있다.
  3. 모든 일급 객체는 할당의 대상이 될 수 있다.
  4. 모든 일급 객체는 비교 연산(==, equal)을 적용할 수 있다

 

위의 조건들을 보면 평소에 자주 사용하는 변수도 일급 객체라고 할 수 있다.

변수들은 매개 변수, 반환값, 값 대입이 모두 가능하기 때문이다. 

 

그리고 Swift에서 함수는 일급 객체에 해당한다.

그러므로 함수도 아래와 같이 할당이 가능하다.

func greeting(to friend: String, from me: String) {
	print("Hello \(friend), I'm \(me)")
}

// 새로운 함수에 기존의 함수를 대입하여 
var someFunction: (String, String) -> Void = greeting(to:from:)
// 바로 함수 형태로 사용하고 있는 것을 확인할 수 있다.
someFunction("So Kyte", "Hu Ree")

 

할당 뿐 아니라, 실질적인 매개변수가 될 수도 있고

let data: (Data) -> Void = { }
func doSomething(withData data: Data, action: (Data) -> Void) {
	action(data)
}

doSomething(data, action)

 

 

함수의 반환 값으로 함수를 사용할 수도 있다.

let data: (Data) -> Void = { }
func getClosure() -> (Data) -> Void {
	return data
}

 

'Swift' 카테고리의 다른 글

Attribute (@어쩌구)  (0) 2022.08.10
Closure (클로저)  (0) 2022.08.10
Singleton Pattern  (0) 2022.08.05
프로토콜  (0) 2022.08.02
프로퍼티 - 저장 프로퍼티  (0) 2022.07.27