프론트엔드/Swift

[Swift] First-class citizen 알아보기 (일급 객체)

dotudy 2024. 10. 16. 10:13

First-class citizen: 일급객체, 특정 요소가 다른 값들과 동일하게 취급될 수 있는 성질을 말한다.

 

일급 객체는 다음과 같은 속성을 가진다.

1. 변수에 할당 가능

2. 함수의 인자로 전달 가능

3. 함수의 반환값으로 사용 가능

4. 데이터 구조 안에 저장 가능

 

한 마디로 요약하면, 변수나 상수로 쓰일 수 있다는 것이다.

 

Swift는 함수를 일급 객체로 사용한다. 따라서 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있고 반환값으로 사용할 수도 있다. 

 

1. 변수를 함수에 할당

변수를 함수에 할당하는 가장 기본적인 예를 보자. 해당 예시에서는 변수 greet에 sayHello 함수를 할당하였다. 

func sayHello(){
  print("Hello")
}

// 함수 자체를 변수에 할당
let greet = sayHello

// 변수를 사용해 함수 호출
greet()  // Hello

sayHello 라는 함수 자체를 greet 라는 변수에 할당항고 greet()를 호출하니 원래 함수 sayHello()가 호출된 것과 똑같이 동작한다.

 

2. 함수 인자로 함수 전달

// 함수를 인자로 받는 함수
func performAction(action: () -> ()){
    action()
}

// 호출할 함수
func sayGoodbye(){
    print("Goodbye!")
}

// 함수를 인자로 전달
performAction(action: sayGoodbye)  // Goodbye!

performAction이라는 함수가 다른 함수를 인자로 받아서 그 함수를 실행한다. 

 

3. 함수의 반환값으로 함수 전달

// 함수의 반환값으로 함수 전달
func createGreeting() -> () -> Void {
    return{
        print("Hi, there!")
    }
}

// 함수를 반환받아 실행
let greetingFunc = createGreeting()
greetingFunc()  // Hi, there

createGreeting 함수를 다른 함수를 반환한다. 반환된 함수는 이후에 greetingFunc()으로 호출할 수 있다.

() -> () -> Void의 뜻을 알아보자.

외부함수: () -> (내부 함수)

내부함수: () -> Void

 

createGreeting 함수는 () -> Void 타입의 함수를 반환한다. 즉, createGreeting()를 호출하면 내부 함수가 반환된다.

return{...} 이 내부 함수이다.

반환된 함수를 변수 greetingFunc에 할당한다.

greetingFunc은 이제 함수이므로 호출할 수가 있다.