(swift) 11. Property (프로퍼티)

Reading time ~1 minute

[swift] 11. Property (프로퍼티)


프로퍼티란 클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다.

프로퍼티는 저장 프로퍼티, 연산 프로퍼티, 타입 프로퍼티가 존재한다.
저장 프로퍼티는 인스턴스의 변수 또는 상수를 의미한다.
연산 프로퍼티는 값을 저장하는 것이 아닌, 특정 연산을 실행하는 결과 값을 저장한다.
타입 프로퍼티는 특정 타입에서 사용하는 프로퍼티이다.




저장 프로퍼티

// 저장 프로퍼티
struct Dog {
    var name: String
    let gender: String
}

var dog = Dog(name: "이준혁", gender: "Male")
print(dog)

dog.name = "김철수"
// dog.gender = "Female" -> Error (let이므로)

let dog2 = Dog(name: "김철수", gender: "Male")
// dog2.name = "김철수" -> Error (구조체 인스턴스가 상수이기 때문에.)

//클래스는 상수로 선언해도 인스턴스에서 변경이 가능하지만, 구조체는 상수로 선언할 경우 인스턴스에서 변경이 불가하다.

class Cat {
    var name: String
    let gender: String

    init(name: String, gender: String) {
        self.name = name
        self.gender = gender
    }
}

let cat = Cat(name: "json", gender: "Male")
cat.name = "gunter"
print("cat.name: \(cat.name)")

출력 결과

Dog(name: "이준혁", gender: "Male")
cat.name: gunter




연산 프로퍼티

struct Stock {
    var averagePrice: Int
    var quantity: Int
    var purchasePrice: Int {    // 게터 세터를 사용한 연산형 프로퍼티
        get {
            return averagePrice * quantity
        }
        set(newPrice) {
            averagePrice = newPrice / quantity
        }
    }
}

var stock = Stock(averagePrice: 2300, quantity: 3)
print("stock: \(stock)")
print("stock.purchasePrice: \(stock.purchasePrice)")
stock.purchasePrice = 3000
print("stock.averagePrice: \(stock.averagePrice)")

출력 결과

Stock(averagePrice: 2300, quantity: 3)
stock.purchasePrice: 6900
stock.averagePrice: 1000




프로퍼티 옵저버

프로퍼티의 값의 변화를 관찰하고 반영한다.
새로운 값이 기존 값과 같더라도 프로퍼티 옵저버가 호출이 된다.(set 될 경우 호출)
저장 프로퍼티, override된 저장 계산 프로퍼티에서만 사용 가능하다.

class Account {
    var credit: Int = 0 {
        // 소괄호 이름 지정
        willSet {   // 값이 저장되기 직전에 호출
            print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.")
        }
        didSet {    // 값이 저장된 직후에 호출
            print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.")
        }
    }
}

var account = Account()
account.credit = 1000

출력 결과

잔액이 0원에서 1000원으로 변경될 예정입니다.
잔액이 0원에서 1000원으로 변경되었습니다.




타입 프로퍼티

타입 프로퍼티란 인스턴스 생성 없이 객체 내 프로퍼티 접근을 가능하게 하는 것을 말한다.
타입 프로퍼티는 저장 프로퍼티와 연산 프로퍼티에서만 사용 가능하다.

struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 1
    }
}

print("SomeStructure.computedTypeProperty: \(SomeStructure.computedTypeProperty)")
print("SomeStructure.storedTypeProperty: \(SomeStructure.storedTypeProperty)")
SomeStructure.storedTypeProperty = "Hello"
print("SomeStructure.storedTypeProperty: \(SomeStructure.storedTypeProperty)")

출력 결과

SomeStructure.computedTypeProperty: 1
SomeStructure.storedTypeProperty: Some value
SomeStructure.storedTypeProperty: Hello

Gitpporter Privacy

Published on January 02, 2023

(PillSoGood) 지원

Published on November 20, 2022