본문 바로가기

swift 기본 문법

swift에서 일급 객체란? 알아보기

반응형

공부를 하다보면 모르는 용어가 있다. 이러한 용어들을 한번쯤은 정리하고 간다면 도움이 될 것 같다. 

 

일급 객체란??

다음과 같은 조건을 만족시킨다면 1급 객체라고 한다. 

  • 변수나 상수에 저장과 할당이 가능해야 한다.
  • 함수의 매개변수로 사용이 가능하다. 
  • 함수(객체)에서 return이 가능하다. 

다음과 같은 특징은 함수가 가지고 있고 가장 중요하게 사용되는 것 같다. 

 

때문에 예시를 한번씩 들어보며 익혀보면 좋겠다는 생각이 들었다. 

 

1. 변수나 상수에 저장과 할당이 가능하다. 

func getAge() -> Int {
    return 10
}
var myAge = getAge()
print(myAge) //10

//할당
var inputAge = getAge
print(inputAge) // (Function)

var yourAge = inputAge()
print(yourAge) //10

10을 리턴하는 getAge함수를 myAge 변수로 대입하면 myAge 의 결과는 10이 나온다.

또한 inputAge라는 변수에 getAge를 할당하고 

yourAge = inputAge()로 실행시켜주면 같은 값이 나타난다. 

 

2. 함수의 매개변수로 사용이 가능하다. 

func Value(_ name: String) -> String {
    return "내 이름은 \(name)"
}



func getName(nameValue: (String) -> String, name: String) -> String {
    return nameValue(name)
}
var result = getName(nameValue: Value(_:), name: "철수")
print(result) //내 이름은 철수

다음 코드를 보면

var result = getName에서 nameValue의 매개변수로 Value()함수를 사용한 것을 볼 수 있다. 

Value 함수의 return 값인 "내 이름은 \(name)을 사용하였다. 

 

이처럼 함수 내에서 추가적인 로직을 만들고자 할 때, 함수를 인자로 받아서 사용할 수 있겠다. 

 

3. 함수의 리턴값으로 사용이 가능하다. 

 

func likeFood(name: String) -> String {
    return "좋아하는 \(name)"
}
func hateFood(name: String) -> String {
    return "싫어하는 \(name)"
}
func myFoodCase(foodName : String) -> String {
    switch foodName {
    case "피자":
        return likeFood(name: foodName)
    case "생선":
        return hateFood(name: foodName)
    default:
        return "아직 모름"
    }
}

var pizza = myFoodCase(foodName: "피자") // 좋아하는 피자
var fish = myFoodCase(foodName: "생선") // 싫어하는 생선

2번과 맥락이 비슷하다. 역시 추가적인 로직을 짜고 싶을 때, 사용이 가능하지만 

3번을 이용하면 case별로 여러 함수를 사용할 수 있다. 

 

 

이렇게 1급객체에 대해서 간단하게 알아보았다. 

다음을 공부하면서 쉽게 사용하지 않았던 방법들을 공부할 수 있었던 것 같다. 

 

참고

https://richard25.tistory.com/62

 

일급객체(First Class Citizen)이란? - with Swift

First Class Citizen (일급 객채) 함수형 프로그래밍을 공부하다가 처음 듣게 된 말이다. 그리고 굉장히 자주 나온다. First Class Citizen은 다음 조건을 만족하는 객체를 의미한다. 1. 변수나 상수에 저장

richard25.tistory.com

https://jiseobkim.github.io/swift/2021/10/04/Swift-%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4.html

 

Swift - 일급 객체

나만의 공간

jiseobkim.github.io

 

반응형