iOS

[iOS] 지연 저장 프로퍼티(Lazy) vs 타입 프로퍼티 (Static)

스벅 보안관 2024. 6. 1. 15:18

안녕하세요 스벅보안관입니다.

 

이번 시간에는 Swift에서 자주 사용하는 지연 저장 프로퍼티(Lazy)와 타입 프로퍼티(Static)에 대해 알아보겠습니다.

두 프로퍼티의 차이점과 사용 예시를 통해 어떻게 활용할 수 있는지 알아보겠습니다.

 

 

지연 저장 프로퍼티 (Lazy)

Lazy 프로퍼티란?

지연 저장 프로퍼티는 처음 사용될 때 초기화되는 프로퍼티입니다. 객체가 생성될 때 초기화되지 않고, 해당 프로퍼티가 실제로 호출될 때 초기화되기 때문에 불필요한 성능 낭비를 줄일 수 있습니다.

사용 방법

class LazyExample {
    lazy var lazyProperty: String = {
        return "꽁꽁얼어붙은 swift위로 lazy가 등장합니다."
    }()
    
    init() {
        print("lazy 초기화")
    }
}

let example = LazyExample()
print(example.lazyProperty)

 

보통 무거운 초기화 작업이나, 해당 프로퍼티가 사용될지 확실하지 않은 경우 등에 자주 사용합니다.

필요할 때만 초기화되기 때문에 불필요한 리소스를 낭비하지 않아서 성능 최적화 면에서 장점을 보이지만,

여러 스레드에서 동시에 접근할 경우 예상치 못한 동작이 발생할 수 있습니다.

 

 

타입 프로퍼티 (Static)

Static 프로퍼티란?

타입 프로퍼티는 인스턴스가 아닌 타입 자체에 속하는 프로퍼티입니다. 클래스, 구조체, 열거형 등에서 사용할 수 있으며, 모든 인스턴스가 동일한 값을 공유합니다.

사용 방법

타입 프로퍼티를 선언하려면 static 키워드를 사용합니다. 클래스에서는 class 키워드도 사용할 수 있습니다.

struct StaticExample {
    static var staticProperty: String = "static 프로퍼티 등장!"
    
    static func staticMethod() {
        print("static 입니다")
    }
}

print(StaticExample.staticProperty) 
StaticExample.staticMethod()

 

모든 인스턴스가 공통으로 사용하는 데이터가 있는 경우, 인스턴스에 종속되지 않는 메서드를 정의할 때 자주 사용합니다.

특히 나중에 제가 작성할 싱글톤 패턴에서 사용합니다.

 

모든 인스턴스에서 동일한 데이터를 공유할 수 있다는 장점이 있지만, 타입 프로퍼티는 메모리에 계속 유지되므로, 불필요한 메모리 사용을 방지해야 합니다.

 

 

오늘의 결론

 

lazy를 알아보니 closure를 자연스럽게 공부해야하는군,,,,

static를 알아보니 singleton을 자연스럽게 공부해야하는군,,,,

 

역시 ios 개발공부의 끝은 없는건가,,