Menu
Coddy logo textTech

계산 프로퍼티

Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 12번째.

저장 프로퍼티는 값을 보유합니다. 계산 프로퍼티는 저장 공간이 없습니다. 읽을 때마다 코드를 실행하고 다른 프로퍼티에서 계산된 값을 반환합니다:

struct Rectangle {
    var width: Double
    var height: Double

    var area: Double {
        width * height
    }
}

var r = Rectangle(width: 3, height: 4)
print(r.area)
r.width = 10
print(r.area)

출력:

12.0
40.0

값은 읽을 때마다 다시 계산되므로, 계산된 프로퍼티는 절대 최신 상태가 아닐 수 없습니다. 괄호 없이 저장된 프로퍼티처럼 읽습니다:

struct Person {
    var first: String
    var last: String

    var fullName: String {
        "\(first) \(last)"
    }
}

var p = Person(first: "Ada", last: "Byron")
p.last = "Lovelace"
print(p.fullName)

출력:

Ada Lovelace

계산 프로퍼티에는 setter도 사용할 수 있습니다. set은 새 값을 newValue로 받아 이를 기반으로 하는 저장 프로퍼티를 업데이트합니다:

struct Temperature {
    var celsius: Double

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

var t = Temperature(celsius: 100)
print(t.fahrenheit)
t.fahrenheit = 32
print(t.celsius)

출력:

212.0
0.0

다른 값들로부터 도출되며 계산 비용이 저렴한 값에는 계산된 프로퍼티를 사용하세요. 작업에 인수가 필요하거나 비용이 많이 드는 경우에는 메서드를 사용하세요:

struct Order {
    var items: [Int]
    var total: Int { items.reduce(0, +) }           // 프로퍼티: 인자 없음
    func total(withTax rate: Int) -> Int {           // 메서드: 인자를 받음
        total + total * rate / 100
    }
}
challenge icon

챌린지

쉬움

저장 프로퍼티 radius와 읽기 전용 계산 프로퍼티 세 개를 사용하여 구조체 Circle을 완성하세요: diameter(반지름의 두 배), area(Double.pi를 사용하는 π r²), 그리고 면적을 String(format: "%.2f", area)를 사용하여 소수점 둘째 자리까지 반올림한 r=2.0 d=4.0 a=12.57을 반환하는 label입니다.

제공된 코드는 줄마다 하나의 반지름을 읽고, Circle을 생성한 다음 label을 출력합니다. 그런 다음 마지막 원의 반지름을 두 배로 만들고 label을 다시 출력하므로, 값은 반지름을 따라 변경되어야 합니다.

코드는 Circle.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.

직접 해보기

import Foundation

// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
var last = Circle(radius: 0)
for line in input {
    last = Circle(radius: Double(line)!)
    print(last.label)
}
last.radius *= 2
print(last.label)
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Swift 플레이그라운드