[Swift] Class - 2

팔랑이·2023년 6월 12일
post-thumbnail

저장 및 연산 property (get, set)

  • 저장 프로퍼티: var, let에 담겨있는 값
  • 연산 프로퍼티: 어떤 수식이나 로직에 따라 연산된 값. 값을 저장하지 않기 때문에 형식 추론 불가능해 형식을 반드시 명시해야 하며, get 또는 set 으로 연산된 값을 받아온다.

다음은 계좌 잔액에서 은행 수수료를 뺀 값을 저장하는 프로퍼티를 만든 예제.

class BankAccount{
	var accountBalance: Float = 0
    var accountNum: Int = 0
   
    let fees: Float = 25.00
    
    var balanceLessFees: Float {
    	get {
        	return accountBalance - fees
        }
    }
    // fee 상수 선언, 연산프로퍼티 balanceLessFees 설정, get으로 연산값을 받아옴.
    
    set(newBalance) {
    	accountBalance = newBalance - fees
    }
    // set으로 값을 받아오는 것은 선택사항.
    
    func displayBalance() {
    	print("Number \(accountNum)")
        print("Current balance is \(accountBalance)")
    }
    
    class func getMaxBalance() -> Float {
    	return 100000.00
    }
}

다음과 같이 값을 받아오거나 새 값을 설정할 수 있음.

var balance1 = account1.balanceLessFees
// 연산프로퍼티 balanceLessFees의 결과값을 받아옴.

account1.balanceLessFees = 150000.55
// account1 인스턴스의 balanceLessFees 값을 설정

지연 저장 property (lazy)

클래스가 가진 리소스가 커서, 클래스가 제공되고 초기화되는데 시간이 오래 걸리고 뷰 로딩에 과부하가 올 수 있다.

이런 상황이 예상될 때, property 를 lazy로 선언해 그 값이 최초로 접근될 때만 class가 초기화되게 만들 수 있다.

class MyClass {

	lazy var myProperty: String = {
    	var result = resourceIntensiveTask()
        result = processData(data: result)
        return result
    }()
.
.
}

위의 예제에서, MyClass는 myProperty의 값이 하나라도 선언되거나 사용되기 전까지는 로딩되지 않는다.

이로써 효율적인 메모리 관리를 할 수 있게 된다!

📚 참고도서
[SwiftUI 기반의 iOS 프로그래밍]

profile
정체되지 않는 성장

0개의 댓글