728x90
728x90
Swift 프로퍼티 심층 다이빙: 저장, 계산, 지연 저장 프로퍼티
Swift에서 프로퍼티는 클래스, 구조체 또는 열거형과 같은 타입에 속성이나 특징을 부여하는 중요한 요소입니다. 저장 프로퍼티, 계산 프로퍼티, 지연 저장 프로퍼티는 각기 다른 특징을 가지고 있으며, 어떤 상황에 어떤 프로퍼티를 사용해야 할지 이해하는 것은 효율적인 Swift 개발을 위한 필수적인 지식입니다.
1. 저장 프로퍼티 (Stored Property)
저장 프로퍼티는 값을 직접 저장하는 가장 기본적인 형태의 프로퍼티입니다. 인스턴스가 생성될 때 초기화되거나 나중에 값이 할당될 수 있습니다.
struct Person {
let name: String
var age: Int
}
let person = Person(name: "홍길동", age: 30)
- name: 상수 저장 프로퍼티로, 한번 값이 할당되면 변경할 수 없습니다.
- age: 변수 저장 프로퍼티로, 나중에 값을 변경할 수 있습니다.
2. 계산 프로퍼티 (Computed Property)
계산 프로퍼티는 실제 값을 저장하지 않고, 다른 프로퍼티의 값을 기반으로 계산된 값을 제공합니다. getter와 setter를 사용하여 값을 읽고 쓰는 방식을 정의할 수 있습니다.
struct Rectangle {
var width: Double
var height: Double
var area: Double {
get {
return width * height
}
set {
width = sqrt(newValue)
height = sqrt(newValue)
}
}
}
let rectangle = Rectangle(width: 10, height: 5)
print(rectangle.area) // 50.0
rectangle.area = 25 // width와 height가 모두 5로 변경
- area: 계산 프로퍼티로, width와 height를 기반으로 면적을 계산합니다. setter를 통해 area 값을 변경하면 width와 height 값이 함께 변경됩니다.
3. 지연 저장 프로퍼티 (Lazy Stored Property)
지연 저장 프로퍼티는 처음 사용될 때까지 값이 초기화되지 않는 프로퍼티입니다. 값을 계산하는 데 시간이 오래 걸리거나, 초기화 시점에 필요한 값이 아직 준비되지 않은 경우 유용하게 사용됩니다.
class DataImporter {
var data: [String] = [] // 데이터를 가져오는 데 시간이 오래 걸리는 작업을 수행하는 메서드
init() {
// 데이터를 가져오는 작업은 여기서 수행하지 않고, 실제로 data 프로퍼티에 접근할 때 수행
}
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
}
let manager = DataManager()
manager.data.append("some data") // importer가 처음 사용되는 시점에 data가 초기화됨
- importer: 지연 저장 프로퍼티로, 처음으로 importer에 접근할 때 DataImporter 인스턴스가 생성되고 data 프로퍼티가 초기화됩니다.
각 프로퍼티의 사용 시나리오
- 저장 프로퍼티: 인스턴스의 상태를 나타내는 값을 저장하는 데 사용합니다.
- 계산 프로퍼티: 다른 프로퍼티의 값을 기반으로 계산된 값을 제공하거나, 값이 변경될 때 특정 작업을 수행해야 할 때 사용합니다.
- 지연 저장 프로퍼티: 초기화 비용이 높거나, 초기화 시점에 필요한 값이 아직 준비되지 않은 경우 사용합니다.
요약
프로퍼티 종류설명사용 시나리오
저장 프로퍼티 | 값을 직접 저장 | 인스턴스의 상태 표현 |
계산 프로퍼티 | 다른 프로퍼티를 기반으로 계산된 값 제공 | 읽기 전용 값, 값 변경 시 부가적인 작업 수행 |
지연 저장 프로퍼티 | 처음 사용될 때 초기화 | 초기화 비용이 높거나, 초기화 시점에 필요한 값이 아직 준비되지 않은 경우 |
Sheets로 내보내기
Swift의 프로퍼티는 객체지향 프로그래밍에서 매우 중요한 역할을 합니다. 각 프로퍼티의 특징을 잘 이해하고 적절하게 사용하면 더욱 효율적이고 안전한 코드를 작성할 수 있습니다.
728x90
728x90
'IOS개발: SWIFT > 4. 객체 지향 프로그래밍 심화' 카테고리의 다른 글
Swift 프로토콜 정의와 채택: 프로토콜 상속, 프로토콜 연장 (0) | 2024.09.13 |
---|---|
Swift 상속: 상속의 기본 개념, 오버라이딩, 오버로딩 (0) | 2024.09.13 |
Swift 초기화: 초기화 위임, 실패 가능한 초기화 (0) | 2024.09.12 |
Swift 메서드: 인스턴스 메서드, 타입 메서드 (0) | 2024.09.12 |
Swift의 클래스와 구조체 (0) | 2024.09.12 |