Notice
Recent Posts
Recent Comments
Link
大器晩成
저장속성(Stored Properties) 본문
프로퍼티는 저장 여부를 기준으로 저장프로퍼티와 연산 프로퍼티로 나눌 수 있다.
저장프로퍼티
- 입력된 값을 저장하거나 저장된 값을 제공하는 역할을 합니다.
- 상수 및 변수를 사용해서 정의 가능합니다.
- 클래스와 구조체에서는 사용이 가능하지만, 열거형에서는 사용할 수 없습니다.
// 클래스에서 저장 프로퍼티
//초기화 구문을 작성하고, 그 안에서 초기값 할당
//class Uesr { //에러 발생 코드
// var name: String // 클래스의 경우 생성자가 없을 경우 선언과 동시에 초기화가 필요
//}
//#방법1 초기화 구문을 작성하고, 그 안에서 초기값을 할당
class User {
var name: String
init(){
self.name = ""
}
}
//#방법2 프로퍼티를 옵셔널 타입으로 바꾼다.
class User2 {
var name: String?
}
// (또는)
class User3 {
var name: String!
}
//#방법3 프로퍼티에 초기값을 할당해준다.
class User4 {
var name: String = ""
}
//저장 프로퍼티의 분류
// 1. var 키워드로 정의되는 변수형 저장 프로퍼티(멤버 변수라고 부름)
// 2. let 키워드로 정의되는 상수형 저장 프로퍼티(멤버 상수라고 부름)
// 구조체에서 저장 프로퍼티
struct FixedLengthRange {
var startValue: Int
let length: Int
} // 구조체는 멤버와이즈 초기화 구문을 제공하기 때문에 구조체 선언시, 초기화하지 않아도 오류가 발생하지 않는다.
저장프로퍼티(Stored Property)의 이해
- 저장 프로퍼티는 클래스 내에서 선언된 변수나 상수를 부르는 이름입니다.
(값이 저장되는 일반적인 속성을 저장속성이라 합니다.) - let(상수) 또는 var(변수)로 선언 가능합니다. (만약 저장 속성을 let으로 선언하면 값을 바꿀 수 없습니다.)
- 저장 속성(변수)은 각 속성자체가 고유의 메모리 공간을 가집니다.
- 저장 프로퍼티는 반드시 선언하는 시점에 초기화할 필요는 없지만, 초기값이 할당되지 않은 저장 프로퍼티는 반드시 옵셔널 타입으로 선언해야 합니다.
- 스위프트에서는 클래스의 프로퍼티에 값이 비어 있으면 인스턴스를 생성할 때 무조건 nil 값으로 초기화하기 때문입니다.
- 옵셔널 타입으로 프로퍼티를 선언할 때에는 일반 옵셔널 타입과 묵시적 옵셔널 해제 타입 중에서 선택해서 정의할 수 있다.
- 묵시적 옵셔널 타입은 값을 사용할 시점에서는 절대 nil이 되지 않지만, 선언할 때에는 초기값을 할당해 줄 수 없어서 옵셔널로 선언해야 저장 프로퍼티에 사용됩니다.
- 저장프로퍼티를 선언할 때 초기값을 주지 않으면서도 옵셔널 타입으로 선언하지 않는 방법은 초기화 구문에서 프로퍼티 값을 초기화해 주는 것입니다.
- 반면 구조체는 이 같은 초기값으로부터 자유로워서, 초기값을 할당하지 않고 선언만 하더라도 프로퍼티의 타입을 옵셔널로 지정해주지 않아도 됩니다. 멤버와이즈 초기화 구문이 제공되기 때문입니다.
*묵시적(암시적) 옵셔널 타입은 타입 뒤에 !를 붙인 타입이다. ex) Int!, String! 등..
728x90
'iOS > Swift 문법' 카테고리의 다른 글
| 계산/연산 속성(Computed property) (0) | 2024.11.22 |
|---|---|
| 지연 저장 속성 (Lazy Stored Properties) (0) | 2024.11.21 |
| 초기화(initializer) (0) | 2024.11.21 |
| 클래스와 구조체의 차이 (0) | 2024.11.21 |
| 구조체(Struct)와 클래스(Class) (1) | 2024.11.21 |