大器晩成

저장속성(Stored Properties) 본문

iOS/Swift 문법

저장속성(Stored Properties)

zerobugpark 2024. 11. 21. 23:28

프로퍼티는 저장 여부를 기준으로 저장프로퍼티와 연산 프로퍼티로 나눌 수 있다.

 

저장프로퍼티

  • 입력된 값을 저장하거나 저장된 값을 제공하는 역할을 합니다.
  • 상수 및 변수를 사용해서 정의 가능합니다.
  • 클래스와 구조체에서는 사용이 가능하지만, 열거형에서는 사용할 수 없습니다.
// 클래스에서 저장 프로퍼티
//초기화 구문을 작성하고, 그 안에서 초기값 할당
//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