Swift '문법'

저장 프로퍼티 (Stored Property),연산 프로퍼티 (Computed Property)

김동준. 2024. 8. 23. 21:24

Swift 프로그래밍 언어에서 사용하는 두 가지 프로퍼티 유형입니다. 이 두 프로퍼티는 클래스나 구조체에서 객체의 데이터를 저장하거나 계산하는 역할을 합니다.

저장 프로퍼티 (Stored Property)

정의: 저장 프로퍼티는 변수 또는 상수로 선언되어, 객체의 인스턴스에 특정 값을 저장하는 역할을 합니다. 객체가 생성될 때 메모리에 공간이 할당되고, 저장된 값을 변경하거나 참조할 수 있습니다.

변경 가능 여부: var로 선언된 저장 프로퍼티는 변경 가능하며(mutable), let으로 선언된 저장 프로퍼티는 한 번 초기화된 후 변경할 수 없습니다(immutable).

struct Person {
    var name: String  // 저장 프로퍼티
    let birthYear: Int  // 상수 저장 프로퍼티
}

var person = Person(name: "John", birthYear: 1990)
person.name = "Jane"  // 변경 가능
// person.birthYear = 1985  // 오류 발생: 상수 프로퍼티는 변경 불가

연산 프로퍼티 (Computed Property)

정의: 연산 프로퍼티는 값을 저장하지 않고, 대신 다른 저장 프로퍼티나 연산을 기반으로 값을 계산하는 프로퍼티입니다. 계산된 값을 반환할 때마다 다른 속성이나 계산을 기반으로 값을 동적으로 반환합니다.

특징: 저장 공간 없음: 연산 프로퍼티는 저장 공간을 갖지 않으며, 값을 저장하는 대신 매번 계산합니다.

읽기/쓰기 가능: 읽기 전용(read-only)일 수도 있고, 읽기와 쓰기(read-write)가 모두 가능할 수도 있습니다. get과 set 블록을 사용해 계산식을 정의합니다.

struct Rectangle {
    var width: Double
    var height: Double
    
    // 연산 프로퍼티: 사각형의 넓이를 계산하여 반환
    var area: Double {
        return width * height
    }
    
    // 연산 프로퍼티: 사각형의 가로, 세로를 이용해 둘레를 계산하고, 값 설정 시 가로와 세로 비율을 유지
    var perimeter: Double {
        get {
            return (width + height) * 2
        }
        set(newPerimeter) {
            width = newPerimeter / 4
            height = newPerimeter / 4
        }
    }
}

var rect = Rectangle(width: 10, height: 5)
print(rect.area)  // 출력: 50.0
print(rect.perimeter)  // 출력: 30.0

rect.perimeter = 40  // 둘레를 40으로 설정
print(rect.width)  // 출력: 10.0
print(rect.height)  // 출력: 10.0

 

 

 

요약

저장 프로퍼티: 객체의 데이터를 저장하는 프로퍼티. 메모리에 직접 저장되며 초기화가 필요함.

연산 프로퍼티: 값을 저장하지 않고, 계산하여 값을 반환하는 프로퍼티.get과 set 블록을 사용해 계산식을 정의함.