프로퍼티는 값을 클래스(Class), 구조체(Struct), 열거형(Enum) 에 연결합니다.
프로퍼티의 종류
•
저장 프로퍼티 (Stored Properties)
•
연산 프로퍼티 (Computed Properties)
•
타입 프로퍼티 (Type Properties)
저장 프로퍼티는 실제 상수와 변수 값을 인스턴스로 가집니다. 클래스와 구조체에서 사용되며 열거형에서는 사용할 수 없습니다.
연산 프로퍼티는 값을 가지지 않고 호출 될 때 마다 특정 값을 연산해 리턴 합니다. 클래스, 구조체, 열거형 모두에서 사용할 수 있습니다.
이렇게 만들어진 프로퍼티는 특정 타입을 가질 수 있습니다. (보통 타입을 가지죠.) 이런 프로퍼티를 타입 프로퍼티라고 합니다.
저장 프로퍼티에 대한 내용은 아래 링크를 보자.
이제 연산 프로퍼티, Computed Properties, 콤퓨티드 프로퍼티 를 정리한다.
Computed Properties는 실제 값을 가지지 않는다.
해당 프로퍼티에 접근 할 때 선언된 값을 계산해 가져오는 방식이다.
get과 set을 제공해 값을 넣어줄 때, 가져올 때의 동작을 다르게 쓸 수 있다.var title: String {
get {
return textView.text
}
set {
textView.text = newValue
}
}
struct CompactRect {
var origin = Point()
var size = Size()
var center: Point {
get {
Point(x: origin.x + (size.width / 2), y: origin.y + (size.height / 2))
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
}
Swift
복사
set 에서는 넣어주는 값을 newValue 라은 이름으로 쓸 수 있다.
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
var square = Rect(origin: Point(x: 0.0, y: 0.0), size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
print("square.origin is now at (\(square.origin.x), \(square.origin.y))")
Swift
복사
만약 별도의 값을 쓰고 싶다면 (newText) ← 이런 식으로 변수를 선언할 수 있다.
여기서 get은 필수로 선언해야 하지만 set은 optional 하게 쓸 수 있다.
struct Cuboid {
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double {
return width * height * depth
}
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
Swift
복사
위처럼 선언하면 read-only 가 되어 값을 넣을 수 없게 된다.