1급 객체(First Class Object) / 1급 시민(First Class Citizen)

썹스·2022년 10월 28일
0

Swift 문법

목록 보기
27/68

1급 객체(First Class Object) / 1급 시민(First Class Citizen)

  • Swift에서는 특정 조건을 충족하는 객체(object)를 1급 객체(1급 시민)라 부릅니다.

1급 객체의 조건

1. 객체(object)를 변수에 할당할 수 있다.
2. 객체(object)를 파라미터(매개변수)로 전달할 수 있다.
3. 객체(object)를 리턴타입으로 반환할 수 있다.

  • Swift에서 대표적인 1급 객체로는 함수(func), 클로저(closure), 프로토콜(protocol)이 있습니다.

  • 어떠한 객체(object)를 독립적인 하나의 타입으로 사용할 수 있으면, 해당 객체는 1급 객체라 생각하면 됩니다.


📌 1. 객체(object)를 변수에 할당할 수 있다.

✅ 함수(func)를 변수에 할당

func sum(x: Int, y: Int) -> Int{
    return x+y
}


var kim = sum  //조건1: sum()함수를 변수에 할당
print(kim(50, 50))  // 100

📌 2. 객체(object)를 파라미터(매개변수)로 전달할 수 있다.

✅ 함수(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 입니다."

📌 3. 객체(object)를 리턴값/리턴타입으로 반환할 수 있다.

✅ 함수(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
profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글