프로퍼티란?
클래스, 구조체, 열거형과 관련한 값
프로퍼티 종류
- 저장 프로퍼티
- 연산 프로퍼티
- 타입 프로퍼티
저장 프로퍼티
클래스나 구조체에서 단순히 변수나 상수에 값을 저장하고 있는 프로퍼티
클래스, 구조체에서만 사용 가능
인스턴스를 생성해주어야 초기화됨
구조체는 인스턴스를 var로 선언해야만 내부 프로퍼티 변경 가능
클래스는 인스턴스를 var,let으로 선언해도 내부 프로퍼티 변경 가능
// 구조체 struct Car { var model : String = "A6" let brand : String = "Audi" } var car = Car() car.model = "A7" car.brand = "BMW" // 에러// 클래스 class Car { var model : String let brand : String init(){ self.model = "A6" self.brand = "Audi" } } let car = Car(model: "A6", brand: "Audi") car.model // 상수로 인스턴스 생성했어도 내부 저장프로퍼티인 model은 값 변경이 가능하다. car.brand // 에러
Lazy Stored Properties 게으른 저장 프로퍼티
- 무조건
var를 사용해야하며 인스턴스가 초기화 되는 시점이 아니라 속성에 처음 접근하는 시점에 초기화 되기 때문에 상수를 사용할 수 없다. - 키워드는
lazy를 붙여준다. - 인스턴스를 생성할때 초기화 시켜주지 않아 항상 기본값이 있어야한다.
- 인스턴스 이름으로 속성에 접근한다.
struct Test {
init(){
print("생성 완료!")
}
}
struct Car {
var model : String = "A6"
lazy var test: Test = Test()
}
var car = Car()
car.test // 이때 생성
lazy를 사용하지 않으면 인스턴스 생성과 동시에 print로그가 나온다. lazy를 사용하면 인스턴스 생성때 print로그가 나오지 않고 호출 했을때 생성된다.
연산 프로퍼티
값을 저장하고 있지 않고,특정하게 계산한 값을 반환해주는 프로퍼티
값을 탐색하고 간접적으로 다른 프로퍼티 값을 설정할 수 있는 방법 제공
클래스, 구조체, 열거형에서 사용 가능
get 블록과 set블록이 있다.
get - 속성을 호출했을때
set - 속성에 새로운 값을 할당할때
struct Test { var width: Double var height: Double var result = 0.0 var area: Double { get { return width * height } set { result += newValue } }
}
var test = Test(width: 1.5, height: 2.5)
print("계산 결과 : (test.area) ") // get블록 실행되서 1.5 * 2.5값 반환
test.area = 10 // set블록 실행되서 result에 10 저장
test.result // 10
> 대부분 읽기전용으로 작성을 많이한다. 읽기 전용으로 작성하면 생략해서 작성이 가능한데 아래 소스와 같이 만들수있다.
```swift
var area: Double {
return width * height
}프로퍼티 옵저버
- 새로운 값이 설정될 때마다 이 이벤트를 감지할 수 있는 옵저버를 제공한다.
- willset과 didset 키워드를 사용한다.
- willset - 새로운 값을
newValue로 받을 수 있다. - didset - 먼저 저장되어있는 값을
oldValue로 받을 수 있다. - 일반적으로 어떤 속성의 값이 변경되었을때 UI의 상태를 변경해주거나 특정 메소드를 호출할때 사용한다.
struct Car {
var model: String
var brand: String
var state = "브랜드가 없습니다." {
willSet {
print("새로운 브랜드 \(newValue)로 변경되었습니다. ")
}
didSet {
print("이전 브랜드는 \(oldValue) 입니다.")
}
}
}
var car = Car(model: "A6", brand: "Audi")
car.state = "BMW"
car.state = "Benz"

타입 프로퍼티
인스턴스 프로퍼티란?
구조체와 클래스에 속한 저장프로퍼티와 연산 프로퍼티를 말한다.
타입 프로퍼티
- static 키워드를 사용한다. static을 사용하면 타입 프로퍼티구나 라고 이해하면 된다
- class 키워드를 사용하여 서브클래스에서 슈퍼클래스의 구현을 재정의할 수 있다.
- 재정의(override)
- 저장 프로퍼티에 사용하면 저장 타입 프로퍼티라고 한다.
- 연산 프로퍼티에 사용하면 연산 타입 프로퍼티라고 한다.
- 저장, 연산 프로퍼티와는 다르게 타입 이름으로 접근한다.
Type.storedType.computed
- 구조체, 클래스, 열거형에서도 사용 가능하다.
struct Type { static var stored: String = "저장 타입 프로퍼티" static var computed: String { return "연산 타입 프로퍼티" } } Type.stored // "저장 타입 프로퍼티" Type.computed // "연산 타입 프로퍼티"
// class 키워드를 사용해서 오버라이드
class FirstClass {
class var first: String {
return "슈퍼클래스"
}
}
class SecondClass : FirstClass {
override static var first: String {
return "서브클래스"
}
}'Swift > Swift문법' 카테고리의 다른 글
| Swift문법 - self & super (0) | 2023.04.02 |
|---|---|
| Swift문법 - Subscript (0) | 2023.03.26 |
| Swift문법 - Struct and Class (0) | 2023.03.12 |
| Swift문법 - Enumeration (0) | 2023.03.05 |
| Swift문법 - Collection (0) | 2023.02.26 |