공부를 하다보면 모르는 용어가 있다. 이러한 용어들을 한번쯤은 정리하고 간다면 도움이 될 것 같다.
일급 객체란??
다음과 같은 조건을 만족시킨다면 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
https://jiseobkim.github.io/swift/2021/10/04/Swift-%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4.html
'swift 기본 문법' 카테고리의 다른 글
Swift lazy 알아보기 (0) | 2022.08.31 |
---|---|
swift 고차함수 알아보기1(map, filter, reduce) (0) | 2022.08.12 |
swift enum CaseIterable, map 알아보기 (0) | 2022.08.08 |
swift 정수형(integer), 부동소수형(Floating-point) (0) | 2022.07.03 |
swift 변수, 상수(var, let), 타입 추론, 타입 어노테이션 (0) | 2022.05.19 |