✅ 1급 객체의 조건
1. 객체(object)를 변수에 할당할 수 있다.
2. 객체(object)를 파라미터(매개변수)로 전달할 수 있다.
3. 객체(object)를 리턴타입으로 반환할 수 있다.
Swift에서 대표적인 1급 객체로는 함수(func), 클로저(closure), 프로토콜(protocol)이 있습니다.
어떠한 객체(object)를 독립적인 하나의 타입으로 사용할 수 있으면, 해당 객체는 1급 객체라 생각하면 됩니다.
✅ 함수(func)를 변수에 할당
func sum(x: Int, y: Int) -> Int{ return x+y } var kim = sum //조건1: sum()함수를 변수에 할당 print(kim(50, 50)) // 100
✅ 함수(func)를 파라미터로 사용
func bmi(weight: Double, height: Double) -> Double{ let bmiValue = weight / (height * height * 0.0001) return bmiValue } // 조건2: (Double, Double) -> Double 타입의 함수를 파라미터로 사용 // bmiFunc: (Double, Double) -> Double --> bim()함수를 파라미터로 사용 func manBmi(name: String, weight: Double, height: Double, bmiFunc: (Double, Double) -> Double) -> String{ let result = bmiFunc(weight, height) return "\(name)님의 BMI는 \(result) 입니다." } manBmi(name: "김철수", weight: 72, height: 180, bmiFunc: bmi) // bmiFunc: bmi //"김철수님의 BMI는 22.22222222222222 입니다."
✅ 함수(func)를 return type으로 사용
func sum(x: Int, y: Int) -> Int{ return x + y } func sub(x: Int ,y: Int) -> Int{ return x - y } // 조건3: return type이 함수 // return type이 "(Int, Int) -> Int" func rulingFunc(trueFalse: Bool) -> (Int, Int) -> Int{ if trueFalse{ return sum // true면 sum 함수 반환 } else{ return sub // false이면 sub 함수 반환 } } var kim = rulingFunc(trueFalse: true) kim(50, 50) // 100