Global, Static 변수에 대해 사용시에 초기화 되는 방법
eager
- 앱 시작시 생성됨
- 장점
- 단순하다.
- data race 문제 없다.
- 단점
- 초기 로딩시 느리다.
lazy
- 사용시에 초기화됨
- 장점
- 초기 로딩시 필요없는 것들을 로딩하지 않아 빠르다.
- 단점
- Data race를 발생시킬 수 있다.
- 어느 스레드에서 초기접근하여 생성될지 알수가 없다.
- 생성되는 스레드가 2개이상인데, 동시에 접근한다면 crash다.
Apple에서는..
- C, Objective C -> eager initialization
- Swift -> lazy initialization
Data race 문제는 어떻게 해결?
- 두개 이상의 스레드에서 동시접근 한 경우
- 하나의 스레드에서만 초기화가 가능하다.
- 다른 스레드에서는 block하고, 대기한다.