728x90
Swift 에서 프로퍼티는 클래스(Class), 구조체(Struct), 열거형(Enum)에서 특정 값을 저장하고 관리하는 역할이다.
- 저장 프로퍼티(Stored Property)
- 연산 프로퍼티(Computed Property)
저장 프로퍼티
저장 프로퍼티는 값을 저장하는 역할로,
보통 Swift 문법을 공부해보자 하고 앞 쪽에서 제일 먼저 소개하는 변수, 상수인 var, let 을 사용하여 선언 하게 된다.
이는 Class와 struct 안에서 사용해야한다.
struct Person {
var name: String
let age: Int
}
var person = Person(name: "ANee", age: 15)
print(person.name) // ANee
person.name = "Taenee"
print(person.name) // Taenee
지연 저장 프로퍼티 ?
Lazy 키워드를 사용하여 선언 후, 실제 접근 시 초기화 되는 프로퍼티이다.
메모리 사용을 최적화 할 때 유용한데, 이 프로퍼티를 직접 호출해야 초기화 된다.
// lazy
struct DataLoader {
init() {
print("데이터 로딩 시작!")
}
}
struct LazyExample {
lazy var data = DataLoader()
}
var example = LazyExample()
print("아직 data에 접근하지 않음!")
example.data // 초기화 되는 시점
연산 프로퍼티 (Computed Property)
값을 저장하는 건 아니고, 특정 연산을 수행하여 값을 반환 시키는 프로퍼티를 말하는데,
get 과 set 을 이용해 값을 가져오거나 설정한다.
struct Rectangle {
var width: Double
var height: Double
var area: Double { // 여기가 바로 연산 프로퍼티
return width * height
}
}
let rect = Rectangle(width: 5, height: 10)
print(rect.area) // 50.0
area 라는 프로퍼티는 width, height 가 뭔지를 저장하는 게 아니라 받아온 값으로 연산 처리만 하여 값을 리턴시킨다.
getter와 setter ?
get : side * side를 계산하여 반환
set : 새로운 값이 들어오면, 해당 값을 변환
참고로 get 은 생략이 가능하다.
struct Square {
var side: Double
var area: Double {
get {
return side * side
}
set(newArea) {
side = (newArea).squareRoot()
}
}
}
var square = Square(side: 4)
print(square.area) // 16.0
square.area = 25
print(square.side) // 5.0
// get 생략
var area: Double {
side * side
}
willSet과 didSet (Property Observer)?
뜻이 직관적이다.
프로퍼티 감시자 (Property Observer) 활용하면 값 변경이 추적 가능하다.
willSet : 값이 변경되기 직전 호출
didSet : 값이 변경된 후에 호출
타입 프로퍼티 (Type Property)
static 키워드를 사용하여 타입 자체에 속하는 프로퍼티로, 저장 타입 프로퍼티와 연산 타입 프로퍼티가 있다.
기본 Property 에서 static 을 붙여 있기 때문에 인스턴스 생성 없이 바로 접근이 가능하다.
Circle() << 이렇게 부르지 않아도 된다. static 하기 때문에.
struct Circle {
static let pi = 3.141592 // 저장 타입 프로퍼티
static var description: String { // 연산 타입 프로퍼티
return "이 구조체는 원의 정보를 다룹니다."
}
}
print(Circle.pi) // 3.141592
print(Circle.description) // "이 구조체는 원의 정보를 다룹니다."
728x90
'iOS > Swift' 카테고리의 다른 글
View에서 parameter를 선언할때 var, let 선택 기준 (2) | 2025.04.13 |
---|---|
Swift 함수와 Clousure 의 예제코드 (0) | 2025.03.26 |
Swift 에서의 Generics(제너릭) (0) | 2025.03.20 |
SwiftUI 로 고차함수 예제코드 (0) | 2025.03.19 |
Swift 에서의 초기화와 초기화 해제 (init, deinit) 그리고 self (0) | 2025.03.19 |