본문 바로가기
iOS

[14일차] Structure Property (구조 프로퍼티) 학습

by 디지털노마더 2020. 7. 31.

* Property Observer (프로퍼티 감시자)

 : willSet(값이 변경되기 직전), didSet(값이 변경된 직후) 프로퍼티 변경을 감시

 

* Computed Property (연산 프로퍼티)

  : set, get 저장된 값을 연산(가공)하여 반환

 

* lazy variables (게으른 변수) 

 : 필요하지만 실제로 사용되기 전에는 미리 불러오지 않는 형태의 변수를 의미 (불필요한 메모리 낭비 줄이는 효과)

 

<실습 코드>

import UIKit

struct Person {
    var firstName: String {
        // willSet : 변수 변경이 이루어지기 전에 확인 (firstName --> newValue)로 변경
        willSet {
            print("willSet: \(firstName) --> \(newValue)")
        }
        
        // didSet : 변수가 변경된 이후에 확인 (oldValue --> firstName)로 변경
        didSet {
            print("didSet: \(oldValue) --> \(firstName)")
        }
    }
    var lastName: String
    
    
    var fullName: String {
        // computed Property : 재가공하여 변수를 사용
        get {
            return "\(firstName) \(lastName)"
        }
        
        set {
            if let firstName = newValue.components(separatedBy: " ").first {
                self.firstName = firstName
            }
            
            if let lastname = newValue.components(separatedBy: " ").last {
                self.lastName = lastname
            }
        }
    }
    
    lazy var isPopular: Bool = {
        if fullName == "Kim Jinsu" {
            return true
        }else {
            return false
        }
    }()
    
    static let isAlien: Bool = false // struct(구조)의 직접적인 Property는 "static 변수 사용"
}

var person = Person(firstName: "Jason", lastName: "Lee")

person.firstName
person.lastName

person.firstName = "Hee"
person.lastName = "Me"

person.firstName
person.lastName

person.firstName = "Jinsu"
person.lastName = "Kim"

person.fullName

'iOS' 카테고리의 다른 글

[16일차] Class 사용  (0) 2020.08.04
[15일차] Property vs Method  (0) 2020.08.04
[13일차] Structure(구조)와 Class  (0) 2020.07.30
[12일차] Set 과 Closure 이용  (0) 2020.07.28
[11일차] Array 함수와 Dictionary 실습  (0) 2020.07.27

댓글