Bibi's DevLog 🤓🍎

[Swift] global과 static은 기본적으로 lazy하다. 본문

📱🍎 iOS/🕊 Swift

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

비비 bibi 2023. 2. 14. 23:21

global의 기본 동작은 lazy

Swift Language Guide - Properties - Global and Local Variables 중…

Swift Language Guide - Properties 중.

Global constants and variables are always computed lazily, in a similar manner to Lazy Stored Properties. Unlike lazy stored properties, global constants and variables don’t need to be marked with the lazy modifier.
Local constants and variables are never computed lazily.

전역(global) 상수와 변수는 항상 lazy로 계산된다. lazy 저장 프로퍼티의 동작방식과 같다. 차이점은 lazy라는 키워드가 필요없다는 것이다.
지역(local) 상수와 변수는 절대 lazy로 계산되지 않는다.

static은 global

static은 항상 global(전역)으로 선언된다.

그런데 모든 global은 lazy로 생성된다.

따라서 static도 lazy로 생성되는 것임! (3단 논법?)

즉 Swift에서 static변수는 Lazy Stored Property (lazy 저장프로퍼티)와 같이, 초기값이 그 변수가 처음 사용될 때 계산된다 (= 사용되기 전까지는 계산되지 않는다!)

이를 증명하듯 static var변수에 lazy를 선언하려 하면 오류가 발생함.

lazy static var

오류의 내용은 “이미 lazy인 전역변수에 대해서는 lazy 키워드를 사용할 수 없다”이다.