[Swift] 프로퍼티

Jade·2023년 7월 12일
0

TIL

목록 보기
3/10
post-custom-banner

프로퍼티의 종류에 대해서 Araboza


저장 프로퍼티 (Stored Property)

  • 일반적인 프로퍼티

지연 저장 프로퍼티 (Lazy Stored Property)

  • 프로퍼티가 처음 사용되는 시점에 초기화가 이루어진다. (프로퍼티를 처음 사용해 주어야 초기화)
    struct GamingMouse {
        var companyName: String = "로지텍"
        var productName: String = " G502X"
        lazy var productInfo: String = self.companyName + self.productName
    }
  • 특징
    • 의존적인 값을 할당할 수 있다. (자신의 프로퍼티의 값을 또 다른 프로퍼티에서 사용)
      struct GamingMouse {
          var companyName: String = "로지텍"
          var productName: String = " G502X"
          lazy var productInfo: String = self.companyName + self.productName
      }
          
          var gamingMouse = GamingMouse()
          gamingMouse.productname = " G PRO Superlight"
          
          print(gamingMouse.productInfo) // 로지텍 G PRO Superlight 
    • 변수로만 선언할 수 있다. (lazy let은 사용 불가)
      • 인스턴스 초기화가 완료 될 때까지 값이 없을 수도 있기 때문

연산 프로퍼티 (Computed Property)

  • 관계에서 얻어지는 값
    struct PersonA {
        var koreanAge: Int
        var americanAge: Int {
            get {
                return koreanAge - 1
            }
            set(newValue) {
                koreanAge = newValue + 1
            }
        }
    }
    
    var minseokAge = PersonA(koreanAge: 30)
    minseokAge.americanAge = 26
    
    print(minseokAge) // PersonA(koreanAge: 27)
    • get : 값을 얻어올 때 호출
    • set : 값이 설정되었을 때 호출
    • 읽기 전용으로도 구현 가능 (get만 정의) (한 쪽으로만 의존적인 관계)
  • 프로퍼티 감시자 (Property Observer)
    • 프로퍼티를 감시하고 있다가 프로퍼티의 값이 변경됨에 따라 적절한 작업이 가능하다.
    • 변경되는 값이 현재 값과 같더라도 호출한다. (초기화 시점에는 호출 X)
      struct PersonB {
          var name: String {
              willSet(newValue // 생략 가능) {
                  // some code
              }
              didSet(oldValue // 생략 가능) {
                  // some code
              }
          }
      }
    • willSet : 값이 변경되기 직전 호출
    • didSet: 값이 변경된 직후 호출
  • 타입 프로퍼티 (Type Property)
    • 타입 자체의 프로퍼티 ( 인스턴스를 만들지 않아도 사용 가능)

    • static을 붙여 사용

      struct SomeStucture {
          static var someProperty: Int = 10
      }
      
      let number = SomeStucture.someProperty
profile
응애 iOS 개발자
post-custom-banner

0개의 댓글