First Class Citizen

DevMinion·2022년 7월 29일
2

First Class Citizen(1급 객체)에 대해서 알아보쟈🙌

함수나 클로져를 공부하며 자주 나오는 내용인 First Class Citizen을 알아보도록 한다.

First Class Citizen?

Swift는 함수형 프로그래밍 패러다임을 따르는 언어이다.
함수형 프로그래밍에서 함수는 First Class Citizen이며, 아래의 조건에 만족해야 한다.
First Class Citizen이 뭐냐? 함수가 짱짱쌔다~~

조건

  • 객체가 런타입에도 생성할 수 있어야 한다.
  • 객체를 인자 값으로 전달할 수 있어야 한다.
  • 객체를 반환 값으로 사용할 수 있어야 한다.
  • 데이터 구조 안에 저장할 수 있어야 한다.

이제 예제를 통해 왜 Swift가 함수형 패러다임을 따르고, 어떻게 함수가 위의 조건에 부합하는지 천천히 알아보자.

변수 or 상수에 함수 대입

//MARK: 변수 or 상수에 함수 대입
func sayHello(name: String) {
    print("안녕 \(name)!")
}

var Hi = sayHello(name: "Minion")
let Hello: (String) -> () = sayHello

Hello("Jay")

결과를 확인하면,

여기서 Hello에 함수를 대입하는 방식이 낯설 수 있다. 링크추가 <- 함수 포스팅을 읽으면 이해할 수 있다. 함수 포스팅을 위해 이 포스팅을 작성하고.. 이 포스팅에 함수를 참조하니... 이것은 강한 순환 참조?!?!

함수를 반환 값으로 사용

//MARK: 함수를 반환 값으로 사용
func plus(firstNum: Int, secondNum: Int) -> Int {
    print(firstNum+secondNum)
    return firstNum+secondNum
}

func calCulate() -> (Int, Int) -> Int {
    return plus
}

let nums = calCulate()

nums(10, 20) // 대입 후 호출
calCulate()(10, 20) // 직접 호출

이렇게 함수를 return에 담아 반환 값으로 사용할 수 있다.

인자로 함수를 전달 가능

//MARK: 인자로 함수를 전달 가능
func minus(firstNum: Int, secondNum: Int) -> Int {
    print(firstNum - secondNum)
    return firstNum - secondNum
}

func calCulate2(firstNum: Int, secondNum: Int, fn: (Int, Int) -> Int) -> Int {
    return fn(firstNum, secondNum)
}

calCulate2(firstNum: 20, secondNum: 10, fn: minus)

이렇게 인자로 함수를 전달하여 사용할 수 있다.

References(Thx🤙)

What Are First-Class Functions in Swift - Cocoacasts

profile
iOS를 개발하는 미니언

0개의 댓글