-
Notifications
You must be signed in to change notification settings - Fork 1
[기술 공유] Swift의 전역 변수 초기화 시점
00me edited this page Nov 28, 2024
·
1 revision
Swift Concurrency를 공부하며 스레드 안전성을 알아보던 중 흥미로운 얘기를 듣게 되었다.
let logger = Logger(
subsystem: "com.example.apple-samplecode",
category: "Root View"
)
위 전역변수 logger 코드는 언제 실행될까 ??
전역변수니까 시작 시점에 초기화가 될까 ?
답은 아니다. 왜 그런지 알아보자
C언어와 Objective-C에서의 전역변수는 시작 시점에 초기화가 되는 게 맞다.
그러나, 프로그램 시작 시간에 아주 나쁜 영향을 줄 수 있는 동작이 된다.
Swift는 위 문제점을 인지하고 방지하고자 전역변수를 지연(= lazy) 초기화로 사용한다 !
즉, 전역변수로 선언된 값을 처음으로 사용할 때 초기화가 된다는 뜻이다.
이로인해 앱이 더 빠르게 사용가능한 상태가 될 수 있게 한다.
두 스레드가 동시에 접근하려하면 한 스레드만 초기화되고 하나는 블로킹되어 대기 상태가 된다 ~
Swift의 전역변수는 신이네요
- Swift의 전역변수는 Lazy하게 초기화된다.
- Swift의 전역변수는 동시성도 알잘딱 제공해준다.
아래 WWDC 15~16분쯤부터 17:05까지 나옵니다.