본문 바로가기
🍎iOS프로그래밍/오늘의 공부

Swift 일급객체(First-class object) 일급시민(First-class citizen) / iOS프로그래밍

by 둥둥동동# 2021. 10. 1.
728x90

 

일급객체(First-class object), 일급시민(First-class citizen)

 

일급객체(일급시민)의 조건

일급객체(일급시민)의 예시

 

 

1급객체(1급시민)란

 

1급객체란 다음 세가지의 조건을 만족하는 객체를 뜻합니다

 

  • 변수에 저장이 가능한가?
  • 매개변수로 전달이 가능한가?
  • 리턴값으로 사용가능한가?

 

아래의 예시를 통해 설명 하겠습니다

 

 

변수에 저장 가능한 객체

 

func half(num: Double) -> Double{
    print(#function)
    return num / 2
}
let half2 = half //함수 half를 변수 half2에 저장
print(half(num:2.2))//half(num:_) 1.1
print(half2(2.2))//half(num:_) 1.1
cs

Double형 값을 받아 값의 절반을 리턴하는 half함수를 선언하였습니다

half함수를 half2상수에 할당하고 매개변수를 넣으니 half()와 동일한 동작을 하는것을 확인할 수 있었습니다

단 함수를 저장한 변수,상수는 레이블을 붙일 수 없습니다

 

 

매개변수 전달이 가능한 객체

 

func half(num: Double) -> Double{
    print(#function)
    return num / 2
}
let half2 = half
 
func upDown(Func:(Double) -> Double, value: Double){
    let result = Func(value)
    print(result)
}
upDown(Func: half2, value:8.0//half(num:) 4.0
 
cs

 

upDown함수에서 (Double) -> Double 형 함수를 매개변수로 받습니다

앞서 선언했던 half함수와 같은 자료형이므로 매개변수로 half 또는 half2를 넣을 수 있습니다

함수를 매개변수로 받게 되면 upDown함수에서 half함수를 실행시키게 됩니다

 

 

리턴값 전달이 가능한 객체

 

 

func half(num: Double) -> Double{
    print(#function)
    return num / 2
}
let half2 = half
 
func decideFun() -> (Double)->Double{
   return half2
}
 
var Re = decideFun()
print(Re(1.5))//half(num:) 0.75
 
cs

 

decideFun()은 (Double)-> Double 형 함수를 리턴합니다

리턴받은 함수를 Re변수에 담아 실행시키니 half와 동일한 동작을 합니다

 

 

 

참고자료

 

iOS프로그래밍기초(21-2학기)한성현교수님 강의 내용

728x90
반응형

댓글