Programming/Swift

[Swift] Computed Properties (연산 프로퍼티)

devssun 2019. 7. 28. 18:59
728x90
반응형

Computed Properties 공식문서

연산 프로퍼티
저장된 속성 외에 클래스, 구조 및 열거 형은 실제로 값을 저장하지 않는 계산 된 속성을 정의 할 수 있습니다. 대신 getter와 setter를 제공하여 다른 속성과 값을 간접적으로 검색하고 설정합니다.

기존에는 값을 저장하기 위한 프로퍼티였는데 연산 프로퍼티는 그때 그때 특정한 연산을 통해 값을 리턴하거나 변환시킨다

예제

struct Size {
    var width = 0.0
    var height: Double {
    get {
        return height
    }
    set (newValue) {
        height = newValue * 2
    }
    }
}

위 예제에서 height에 get, set 연산 프로퍼티를 지정하였는데, 저대로 작성하면 warning이 발생한다
height와 같이 자기 자신의 값을 변화시키고 리턴하기 때문에 이런 식으로 사용하면 안되고 값을 저장할 변수가 필요하다

위 코드는 이렇게 수정할 수 있다

struct Size {
    var width = 0.0
    var height = 0.0
    var doubleHeight: Double {
    get {
        return height
    }
    set (newValue) {
        height += newValue
    }
    }
}

doubleHeight 라는 프로퍼티에 연산 프로퍼티를 추가한다

연산 프로퍼티는 읽기 전용나 읽기, 쓰기 전용으로 만들 수 있다. 쓰기 전용으로는 만들 수 없다


연산 프로퍼티는 언제 사용할 수 있을까?

1. 값을 리턴하지 않는 형태의 함수를 읽기 전용 연산 프로퍼티로 만들 수 있다

func selfIntroduce() {
    print("Hello, nice meet you too.")
}

// 읽기 전용 연산 프로퍼티일 때 get은 생략할 수 있다
var selfIntroduceDescrip: String {
    get {
        return "Hello, nice meet you too."
    }
}

2. 반복코드 최소화
위의 예제 코드에서 doubleHeight는 주어진 값만큼 height 저장 프로퍼티에 더하는 연산 프로퍼티다
연산 프로퍼티를 이용하지 않아도 필요할 때마다 가져와 연산하여 사용하면 된다. 하지만 그런 작업이 자주 발생한다면 같은 코드가 계속 생성되는 문제가 발생한다
연산 프로퍼티에 연산 구문을 정의해 놓으면 매번 같은 코드나 함수를 호출할 필요가 없이 프로퍼티 하나를 사용하면 된다


Shorthand Getter Declaration
위에서 작성한 예제에서 set에 newHeight라는 변수가 사용된다
func에서 파라미터를 넣어주듯이 set에도 인자값을 부여할 수 있으며 생략이 가능하다

set (newHeight) {
        height +=  newHeight
    }

newValue가 기본 인자명으로 사용되기 때문에 set()에서 인자를 설정하지 않았다면 반드시 newValue 로 해야 한다

set {
    height += newValue
}
반응형