Swift의 다양한 Property

  • Property는 변수의 다른 이름입니다.
  • 클래스, 구조체, 열거 등 전체적으로 사용되는 변수를 프로퍼티라고 부릅니다.
  • Property의 종류에는 저장 프로퍼티, 연산 프로퍼티, 타입 프로퍼티가 있습니다.
  • 순서대로 하나씩 알아보겠습니다.

저장 프로퍼티

  • 저장 프로퍼티는 가장 일반적인 프로퍼티로써, 값을 저장하는 용도로 사용됩니다.
  • 초기값을 설정 할 수 있고, 클래스 구조체에서는 인스턴스와 연관된 값을 저장합니다.
let name = "Hohyeon Moon"
var age = 25

지연 저장 프로퍼티

  • 지연 저장 프로퍼티는 프로퍼티가 처음으로 사용되기 전까지 초기값이 계산되지 않는 특성을 갖고 있습니다.
  • lazy 키워드를 선언 앞에 작성해서 사용할 수 있고, let은 지연 저장 프로퍼티로 사용할 수 없습니다.
class Position {
  lazy var point: CoordinatePoint = CoordinatePoint()
}

연산 프로퍼티

  • 실제로 값을 저장하지는 않고, get과 set 키워드로 값을 간접적으로 설정하거나 받는 프로퍼티입니다.
var wallet: Int = 10000

var counter: Int {
    get {
        return wallet
    }
    
    set(money) {
        wallet += money
    }
}

타입 프로퍼티

  • 타입 프로퍼티로는 인스턴스의 속성이 아닌, 타입에 따른 속성을 정의할 수 있습니다.
  • static 키워드를 사용해서 값 타입에서 타입 프로퍼티를 설정할 수 있고,
  • class 키워드를 사용해서 클래스 타입에서 타입 프로퍼티를 설정할 수 있습니다.
  • 값을 가져올때는 클래스의 이름을 통해서 가져올 수 있습니다.
struct AudioChannel {
    static let level = 10
    static var maxLevel = 0
}

print(AudioChannel.level) 
print(AudioChannel.maxLevel)

프로퍼티 옵저버

  • Property Observers는 프로퍼티의 값이 변경 될 때 지정된 코드를 실행해줍니다.
  • Lazy 프로퍼티에는 사용 될 수 없고, 저장 프로티에서만 사용이 가능합니다.
  • Property의 값이 변경되기 직전에 willSet이 호출되고, 변경된 직후에는 didSet이 호출됩니다.
  • willSet에서는 newValue가, didSet에서는 oldValue가 자동으로 전달됩니다.
class Account {
    var credit: Int = 0 {
        willSet {
            print("잔액이 \(credit)에서 \(newValue)원으로 변경될 예정입니다.")
        }
        
        didSet {
            print("잔액이 \(oldValue)에서 \(credit)으로 변경되었습니다.")
        }
    }
}

let myAccount = Account()
myAccount.credit = 1000