Swift에서 프로퍼티(Property)는 클래스나 구조체, 열거형에 포함된 값(데이터)을 저장하거나 계산하는 데 사용되는 변수 또는 상수입니다.
Swift는 세 가지 종류의 프로퍼티를 제공합니다: 저장 프로퍼티(stored property), 계산 프로퍼티(computed property), 그리고 프로퍼티 옵저버(property observer)입니다.
프로퍼티는 객체의 상태를 표현하며, 프로퍼티 옵저버를 통해 값의 변경을 감지하고 이에 따른 반응을 정의할 수 있습니다.
1. 저장 프로퍼티 (Stored Property)
저장 프로퍼티는 인스턴스의 일부 데이터를 저장하는 변수 또는 상수입니다.
구조체 또는 클래스 정의 내부에 선언하며, 인스턴스를 만들 때마다 새로운 저장 공간이 생성됩니다.
struct User {
var name: String
var age: Int
}
let user1 = User(name: "지민", age: 28)
print(user1.name) // 지민
User
구조체는 name
과 age
라는 두 개의 저장 프로퍼티를 가지고 있습니다.
2. 계산 프로퍼티 (Computed Property)
계산 프로퍼티는 실제 값을 저장하지 않고, 특정 계산 결과를 반환하거나 설정하는 데 사용됩니다. get
과 set
을 통해 정의합니다.
struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
}
let rect = Rectangle(width: 5.0, height: 3.0)
print("면적: \(rect.area)") // 면적: 15.0
계산 프로퍼티는 연산된 값을 반환하므로, 상태를 직접 저장하지 않고도 속성처럼 사용할 수 있습니다.
3. 읽기 전용 계산 프로퍼티
계산 프로퍼티는 get
만 구현하여 읽기 전용으로 만들 수도 있습니다.
struct Circle {
var radius: Double
var diameter: Double {
get {
return radius * 2
}
}
}
또는 get
키워드를 생략할 수도 있습니다.
4. 프로퍼티 옵저버 (willSet, didSet)
저장 프로퍼티에 값을 설정할 때마다 특정 동작을 실행하고 싶다면 프로퍼티 옵저버를 사용할 수 있습니다.
옵저버는 willSet
과 didSet
두 가지로 구성됩니다.
class StepCounter {
var steps: Int = 0 {
willSet {
print("곧 steps가 \(newValue)로 바뀝니다.")
}
didSet {
print("steps가 \(oldValue)에서 \(steps)로 변경되었습니다.")
}
}
}
let counter = StepCounter()
counter.steps = 10
counter.steps = 20
출력 결과:
곧 steps가 10로 바뀝니다.
steps가 0에서 10로 변경되었습니다.
곧 steps가 20로 바뀝니다.
steps가 10에서 20로 변경되었습니다.
willSet
은 값이 설정되기 직전에 호출되며, newValue
를 사용할 수 있습니다.didSet
은 값이 설정된 직후에 호출되며, 이전 값을 oldValue
로 참조할 수 있습니다.
5. 초기값 없는 저장 프로퍼티
초기값이 없는 저장 프로퍼티는 생성자(init)를 통해 반드시 초기화되어야 합니다.
struct Profile {
var nickname: String
var age: Int
}
이 경우 Profile(nickname:age:)
생성자가 자동으로 생성되며, 인스턴스 생성 시 값을 전달해야 합니다.
마무리
프로퍼티는 객체 내부 상태를 구성하는 핵심 요소이며, 계산 프로퍼티를 통해 동적인 값을 만들 수 있고, 옵저버를 통해 상태 변화에 반응하는 로직을 구현할 수 있습니다. Swift의 프로퍼티 시스템은 코드의 명확성과 안정성을 높이는 데 큰 역할을 합니다.