[Swift] 일급객체 (First Class Citizen)

김창규·2023년 3월 13일
0

Swift

목록 보기
1/3

* 해당 글은 개인 공부자료이므로 오류가 있을 수 있습니다.

일급객체 (First Class Citizen)

  1. 변수 또는 상수에 저장 및 할당을 할 수 있다.
  2. 전달 인자로 전달 할 수 있다.
  3. 반환(return) 값으로 사용 할 수 있다.

위 조건을 충족하면 일급객체 입니다.
Swift에서는 함수를 일급객체로 취급합니다.

예제로 위 조건에 충족하는지 하나씩 살펴보겠습니다.

1. 변수 또는 상수에 저장 및 할당을 할 수 있다.

// 두개의 Int 값을 받아 서로 더한 값을 Int값으로 반환하는 함수
func add(a: Int, b:Int) -> Int {
	return a + b
}

// add 함수를 myFunc 상수에 저장 및 할당
let myFunc = add

print(myFunc(1,2)) // 3

add() 함수를 생성하고, myFunc 상수에 할당이 가능합니다.
변수 또는 상수에 저장 및 할당을 할 수 있다. 가 성립됩니다.

2. 전달 인자로 전달 할 수 있다.

// 1. (Int, Int) -> Int 클로저 타입과 두개의 Int 값을 받아 Int를 반환하는 함수
let calculate(op: (Int, Int) -> Int, a: Int, b: Int) -> Int {
	return op(a,b)
}

// 2. calculate의 반환값을 result 상수에 할당
let result = calculate(add, 3, 4) // 7

calculate() 함수에서는 2개의 Int 값을 받아 Int를 반환하는 클로저타입 1개(op)Int값 2개(a,b)를 받아 Int로 반환합니다.
함수 내부를 보면 opa,b의 Int값을 받은 결과를 반환합니다.

calculate()의 클로저에 이 전에 생성한 함수 add와 3, 4 Int값을 인자로 전달받아 반환되는 결과 값을 result 변수에 저장합니다.
(calcuate함수의 op: (Int, Int) -> Int와 add 함수 func add(a: Int, b:Int) -> Int 처럼 같은 형식이여야 합니다. 그리고 함수도 클로저 입니다. 자료 첨부 예정)

성공적으로 전달하여 결과값을 확인할 수 있습니다.
마찬 가지로 전달 인자로 전달할 수 있다.가 성립되는것을 볼 수 있습니다.


3. 반환 값으로 사용 할 수 있다.

// "(Int,Int) -> Int" 형식을 반환하는 getAddFunction()
func getAddFunction() -> (Int, Int) -> Int {
	return add
}

// getAddFunction()의 반환 값(add 함수)을 addFunction 상수에 할당
let addFunction = getAddFunction()

//  3,4 Int값을 전달 받아 더한 값을 result2 상수에 할당 (add함수)
let result2 = addFunction(3, 4) // 7 

(Int,Int) -> Int 타입을 반환하는 getAddFunction() 함수가 있습니다. 반환은 add() 함수를 반환합니다.
getAddFunction() 함수의 반환값(add()함수)은 addFunction 상수에 할당 합니다.
(addFunction상수에 반환 값 add함수를 할당 가능한 이유는 "1. 변수 또는 상수에 저장 및 할당을 할 수 있다." 이기 때문에 가능합니다.)

addFunction 상수는 add()함수를 저장하고 있기 때문에 Int값을 받아 서로 더한 결과를 반환하게 됩니다.
따라서, 반환 값으로 사용 할 수 있다.가 성립되는것을 볼 수 있습니다.

profile
iOS 공부

0개의 댓글