HIT해

[Swift 기초문법 - 61] get Computed Property 본문

Swift/Swift 기초문법

[Swift 기초문법 - 61] get Computed Property

힛해 2024. 8. 21. 00:09
728x90

Computed Property란?

Computed Property는 클래스, 구조체, 열거형에서 값을 저장하지 않고, 간접적으로 값을 계산하여 반환하는 속성을 뜻한다.

Stored Properties와 달리 Computed Properties는 값이 직접 저장되지 않고, 매번 접근할 때마다 특정 연산을 통해 값을 반환한다.

 

 

기본 구문

Swift에서 Computed Properties는 get 블록과 set 블록(선택사항) 으로 구성된다.

 

struct Rectangle {
    var width: Double
    var height: Double
    
    var area: Double {
        get {
            return width * height
        }
        set {
            width = sqrt(newValue)
            height = sqrt(newValue)
        }
    }
}

 

만약 get만 사용하고 set이 필요 없을 때는 get 블록을 생략할 수 있다.

struct Circle {
    var radius: Double
    
    var diameter: Double {
        return radius * 2
    }
}

 

 

읽기 전용 Computed Property

Computed Property가 읽기 전용일 경우, 값을 반환하는 get 블록만 있으면 된다.

struct Triangle {
    var base: Double
    var height: Double
    
    var area: Double {
        return (base * height) / 2
    }
}

 

하지만 set 블록이 없기 때문애 값을 수정할 수는 없다.

 

get과 set의 활용

읽기와 쓰기가 가능한 Computed Property는 get과 set 모두 가질 수 있다.

get 은 속성을 읽을 때 호출되고, set은 값을 할당할 때 호출됩니다.

struct Temperature {
    var celsius: Double
    
    var fahrenheit: Double {
        get {
            return celsius * 9 / 5 + 32
        }
        set {
            celsius = (newValue - 32) * 5 / 9
        }
    }
}

 

 

클래스 내부 함수 접근을 통한 값 변경

내부 함수를 활용해 값을 변경할 수 있다.

class Sword {
    
    // 내구도
    var durability : Int = 100
    
    var itemInfo : String {
        switch durability {
        case 50...100:
            return "음~ 아주 명검이야 후후후"
        case 10...50:
            return "아직 쓸만 하군"
        default:
            return "더 이상 쓸 것이 못 된다..."
        }
    }
    func attackMonster(){
        self.durability -= 40
    }
}

let mySword = Sword()
mySword.attackMonster()
mySword.itemInfo

mySword.attackMonster()
mySword.itemInfo

mySword.attackMonster()
mySword.itemInfo

 

실행결과