e.den
eden.dev.log
e.den
전체 방문자
오늘
어제
  • 분류 전체보기 (57)
    • 슬기로운 취준 생활 (1)
    • Study (30)
      • Swift (7)
      • iOS (6)
      • Java (2)
      • Spring (6)
      • Algorithm (9)
    • Coding Test (8)
      • Swea (0)
      • Baekjoon (8)
      • Programmers (0)
    • 삽질기 (3)
    • 독서록 (15)
      • Clean Architecture (5)
      • Clean Code (10)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • flatmap
  • mybatis
  • java
  • 클린코드
  • lombok
  • reduce
  • CleanArchitecture
  • RunLoop
  • Map
  • UITextView
  • initializer
  • CGLayer
  • 고차함수
  • property
  • lifecycle
  • 클린아키텍처
  • Spring
  • CoreAnimation
  • 부스트코스
  • compactMap
  • Algorithm
  • swift
  • 알고리즘
  • cleancode
  • 정렬
  • Filter
  • MySQL
  • 자료구조
  • 프로퍼티
  • ios

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
e.den

eden.dev.log

[Swift] Property
Study/Swift

[Swift] Property

2022. 7. 10. 22:10

저장 프로퍼티(Stored Property)


  • 인스턴스의 변수 또는 상수를 의미
  • 구조체와 클래스에서만 사용 가능
  • var, let 키워드 사용

 

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


  • 호출이 있어야 값을 초기화하는 프로퍼티
  • lazy 키워드 사용
  • let 선언 불가: Constant property인 let은 인스턴스가 완전히 생성되기 전에 초기화해야 하므로 사용할 수 없음
  • property의 초깃값이 인스턴스의 초기화가 완료될 때까지 알 수 없는 외부 요인에 의존할 때 사용
  • property의 초깃값에 복잡하거나 계산 비용이 많이 드는 설정이 필요할 때 or 모든 저장 프로퍼티를 사용할 필요가 없을 때 사용
  • 불필요한 성능 저하나 공간 낭비를 줄일 수 있음
  • 주의※: 다중 스레드 환경에서 지연 저장 프로퍼티에 동시다발적으로 접근할 때 한 번만 초기화된다는 보장이 없음, 여러 번 초기화될 수 있다는 점

 

프로퍼티 감시자(Property Observer)


  • 프로퍼티의 값이 변할 때 값의 변화에 따른 특정 작업을 실행함
  • 저장 프로퍼티에 적용할 수 있으며 부모 클래스로부터 상속받을 수 있음
  • willSet(newValue), didSet(oldValue)

ex. 저장 프로퍼티에 프로퍼티 감시자 구현

struct Account {
    var credit: Int = 0 {
        willSet {
            print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.")
        }
        
        didSet {
            print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.")
        }
    }
}

var account = Account(credit: 1000)
account.credit = 5000

 

연산 프로퍼티(Computed Property)


  • 실제로 값을 저장하지 않고 간접적으로 다른 property를 연산하여 getter, setter 제공
  • 클래스, 구조체, 열거형에서 사용
  • set에 따로 이름을 지정하지 않을 경우 newValue로 대체 가능
  • get만 사용해서 읽기 전용 구현 가능

ex. 읽기 전용 프로퍼티

ex. set 사용 시 newValue로 매개변수 이름 대체 가능

 

타입 프로퍼티(Type Property)


  • 각각의 인스턴스가 아닌 타입 자체에 속하는 프로퍼티
  • static 키워드 사용
  • 인스턴스의 생성 여부와 상관없이 타입 프로퍼티의 값은 하나
  • 저장 타입 프로퍼티는 반드시 초깃값을 설정해야 하며 지연 연산된다.
  • lazy와 달리 다중 스레드 환경이라고 하더라도 단 한 번만 초기화된다는 보장을 받음

ex. 저장 타입 프로퍼티와 연산 타입 프로퍼티

struct TypePropertyEX {
    // 저장 타입 프로퍼티
    static var typeProperty: Int = 0
    
    // 연산 타입 프로퍼티
    static var typeComputedProperty: Int {
        get {
            return typeProperty
        }
        
        set {
            typeProperty = newValue
        }
    }
}

// 인스턴스 생성 없이 사용 가능
print(TypePropertyEX.typeProperty) // 0

TypePropertyEX.typeComputedProperty = 100
print(TypePropertyEX.typeProperty) // 100

 

 

 

 

썸네일용 이미지

저작자표시 비영리 변경금지 (새창열림)

'Study > Swift' 카테고리의 다른 글

[Swift] 고차함수(1) - map, flatMap, compactMap  (0) 2022.09.18
[Swift] RunLoop.Mode  (0) 2022.08.01
[Swift] Run Loop  (0) 2022.07.25
[Swift] Initializer 심화 (2)  (0) 2022.07.20
[Swift] Initializer 심화 (1)  (0) 2022.07.19
    'Study/Swift' 카테고리의 다른 글
    • [Swift] RunLoop.Mode
    • [Swift] Run Loop
    • [Swift] Initializer 심화 (2)
    • [Swift] Initializer 심화 (1)
    e.den
    e.den
    문제를 본질적으로 접근하자

    티스토리툴바