황민우 2022. 1. 6. 16:28

정의

 = Property가 설정되거나 검색되는 시점에서 계산, 파생 된 값

 

Computed Property 의 구성

 - getter 메서드 ( 값을 리턴 )
 - setter 메서드 ( 값을 대입 )

 

예제 1

class Test{
    var A : Int				// Stored Property
    var B : Int				// Stored Property
    var C : Int{			// Computed Property
        get{
            return A-1
        }
    }
    
    func OutPut() {
        print("A = \(A), B = \(B)")
    }
    init(A: Int, B: Int){
        self.A = A
        self.B = B
    }
}

var Number : Test = Test(A: 5, B: 8)
Number.OutPut()
print(Number.C)

실행결과
// A = 5, B = 8
// 4

 

예제 2 : getter 생략

 - setter 가 없으면, get{} 을 생략 할 수 있다. 

class Test{
    var A : Int
    var B : Int
    var C : Int{
            return A-1
    }
    
    func OutPut() {
        print("A = \(A), B = \(B)")
    }
    init(A: Int, B: Int){
        self.A = A
        self.B = B
    }
}

var Number : Test = Test(A: 5, B: 8)
Number.OutPut()
print(Number.C)

실행결과
// A = 5, B = 8
// 4

 

예제 3 : setter 입력

class Test{
    var A : Int
    var B : Int
    var C : Int{
        get{
            return A-1
        }
        set(CA){
            A = CA + 1
        }
    }
    
    func OutPut() {
        print("A = \(A), B = \(B)")
    }
    init(A: Int, B: Int){
        self.A = A
        self.B = B
    }
}

var Number : Test = Test(A: 5, B: 8)
Number.OutPut()
print(Number.C)
print(Number.A)
Number.C = 15
print(Number.A)

실행결과
// A = 5, B = 8
// 4
// 5
// 16

 

예제 4 : newValue

 - setter의 매개변수명이 newValue인 경우 set( ){ } 의 ( ) 부분을 생략가능.

class Test{
    var A : Int
    var B : Int
    var C : Int{
        get{ return A-1 }
        set{ A = newValue + 1 }
    }
    
    func OutPut() {
        print("A = \(A), B = \(B)")
    }
    init(A: Int, B: Int){
        self.A = A
        self.B = B
    }
}

var Number : Test = Test(A: 5, B: 8)
Number.OutPut()
print(Number.C)
print(Number.A)
Number.C = 15
print(Number.A)

실행결과
// A = 5, B = 8
// 4
// 5
// 16

강의 출처 : https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA