Search
⚖️

Computed Property(연산 프로퍼티)

프로퍼티는 값을 클래스(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 가 되어 값을 넣을 수 없게 된다.