본문 바로가기
iOS/Swift

[Swift] global과 static은 기본적으로 lazy

by 최지철 2024. 7. 30.
728x90
반응형

gobal과 static의 Lazy 초기화

 

Lazy 초기화란?

Lazy 초기화는 변수가 실제로 사용될 때까지 초기화를 지연하는 기법을 말한다. 이는 프로그램의 시작 시점에 불필요한 메모리 사용을 피하고, 초기화 비용을 줄이기 위해 사용된다. 다시 말해, 변수가 처음 사용되기 전까지는 초기화되지 않는다.

공식문서에서는 "lazy 저장 변수는 이것이 처음 사용되기 전까지 초기값이 계산되지 않는 프로퍼티 입니다. 사용자는 선언부에 lazy 수정자를 붙임으로써 lazy 저장 변수를 나타낼 수 있습니다."라고 되어있다.

사용자는 항상 lazy 프로퍼티를 variable로 선언해야만 한다.
왜냐하면 이 프로퍼트의 초기값을 인스턴스 초기화가 완료된 시점까지 알 수 없기 때문이다.
상수 프로퍼티는 초기화가 끝나기전까지 반드시 값을 가져야하기 때문에, lazy로 선언될 수 없다.

 

static(전역)은 global하다.

global은 기본적으로 lazy하다. 고로 static도 lazy하다.

 

* global이 lazy하다는 공식문서
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/properties/

 

Documentation

 

docs.swift.org

 

왜 global과 static이 Lazy 초기화를 하는가?

global과 static 변수가 lazy 초기화를 하는 이유는 주로 메모리 효율성과 성능 향상을 위한 것이다. 이를 구체적으로 살펴보면 다음과 같은 이유들이 있다.

1. 메모리 효율성

메모리 효율성을 높이기 위해, global과 static 변수는 실제로 사용될 때까지 초기화를 지연한다. 프로그램이 시작될 때 모든 변수를 초기화하면, 사용되지 않는 변수들도 메모리를 차지하게 된다. lazy 초기화를 사용하면 필요한 변수만 초기화되어 메모리 낭비를 줄일 수 있다.

예를 들어, 많은 글로벌 변수를 선언한 프로그램에서 실제로 사용되는 변수는 일부일 수 있다. 이 경우, 필요할 때만 초기화되는 lazy 초기화는 메모리 사용량을 크게 줄여준다.

2. 성능 향상

프로그램 시작 시점에 모든 변수를 초기화하는 것은 시간이 많이 걸릴 수 있다. 특히 초기화 과정이 복잡한 경우, 프로그램의 시작 시간이 길어질 수 있다. lazy 초기화는 이러한 초기화 작업을 실제로 변수가 필요할 때까지 지연시켜 초기 로딩 시간을 단축시킨다.

예를 들어, 초기화 과정에서 네트워크 요청이나 파일 입출력 작업이 필요한 경우, 프로그램 시작 시점에 모든 초기화 작업을 수행하면 시작 시간이 길어질 수 있다. 이 때, lazy 초기화를 사용하면 첫 사용 시점까지 이러한 작업을 지연시켜 초기 성능을 향상시킬 수 있다.

3. 초기화 순서 제어

프로그램에서 변수들이 서로 의존성을 가질 때, 초기화 순서를 제어하는 것이 중요하다. lazy 초기화를 사용하면 변수의 초기화 순서를 코드 작성 시점에 명확하게 정의할 수 있다. 이는 초기화 순서로 인해 발생할 수 있는 문제를 예방하는 데 도움이 된다.

예를 들어, 글로벌 변수 A가 글로벌 변수 B에 의존하는 경우, B가 먼저 초기화되지 않으면 A의 초기화 과정에서 문제가 발생할 수 있다. lazy 초기화를 사용하면 A가 실제로 사용될 때 B가 이미 초기화된 상태인지 확인할 수 있다.

4. 불필요한 초기화 방지

프로그램의 일부 기능이나 모듈이 특정 상황에서만 사용될 때, 해당 기능에 관련된 변수들을 초기화할 필요가 없다. lazy 초기화를 사용하면 이러한 불필요한 초기화를 방지할 수 있다. 이는 특히 큰 규모의 프로그램에서 유용하다.

예를 들어, 사용자가 특정 기능을 활성화하지 않으면 해당 기능과 관련된 변수들이 초기화되지 않도록 할 수 있다. 이는 불필요한 리소스 사용을 줄이고 프로그램의 전체 성능을 향상시키는 데 기여한다.

결론

Global과 Static 변수의 lazy 초기화는 메모리 효율성을 높이고, 프로그램의 초기 성능을 향상시키며, 초기화 순서를 제어하고 불필요한 초기화를 방지하기 위한 중요한 기법이다. 이를 통해 프로그램은 보다 효율적으로 동작할 수 있으며, 특히 대규모 애플리케이션에서 그 유용성이 두드러진다. 이러한 기법을 잘 이해하고 적절히 활용하는 것은 고성능, 고효율 소프트웨어 개발에 큰 도움이 된다.

 
 
728x90
반응형