You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| **SYNCHRONIZED** (기본값) | ✅ 안전 | 중간 (락 사용) | 1회 보장 | 멀티스레드 환경 (일반적) |
395
+
| **PUBLICATION** | ✅ 안전 | 높음 (락 없음) | 여러 번 가능 (첫 결과만 사용) | 멱등성 있는 초기화 |
396
+
| **NONE** | ❌ 불안전 | 최고 | 상황에 따라 다름 | 단일 스레드 환경만 |
397
+
390
398
-**`SYNCHRONIZED` (기본값):**
391
399
가장 안전한 옵션입니다. 여러 스레드가 동시에 프로퍼티에 접근해도, 락(lock)을 사용해 단 하나의 스레드만 초기화 람다(lambda)를 실행하도록 보장합니다. 다른 스레드들은 초기화가 완료될 때까지 대기했다가 완료된 값을 받습니다. 멀티스레드 환경에서 데이터 일관성이 중요할 때 씁니다.
392
400
-**`PUBLICATION`:**
@@ -502,7 +510,35 @@ class ImageLoader {
502
510
| **주요 예외** | `UninitializedPropertyAccessException` | X (람다 블록 내 예외는 발생 가능) | `NullPointerException` (`!!` 사용 시) |
503
511
| **주요 사용처** | 필드 주입, 생명주기 의존 객체 | 싱글턴, 비용이 큰 `val` | 선택적으로 값이 없거나, 리셋이 필요한 경우 |
504
512
505
-
### 6.2. 선택을 위한 의사결정 흐름도
513
+
### 6.2. 선택을 위한 의사결정 플로우차트
514
+
515
+
```
516
+
┌─────────────────────────────────────┐
517
+
│ Kotlin 지연 초기화 방식 선택하기 │
518
+
└──────────────┬──────────────────────┘
519
+
│
520
+
▼
521
+
┌──────────────┐
522
+
│ 값이 불변인가? │
523
+
│ (val?) │
524
+
└──┬───────┬───┘
525
+
│ │
526
+
YesNo
527
+
│ │
528
+
▼ ▼
529
+
┌─────────┐ ┌──────────────────────┐
530
+
│ by lazy │ │ 절대 null이 안 되는가? │
531
+
└─────────┘ └──┬───────────────┬───┘
532
+
│ │
533
+
YesNo
534
+
│ │
535
+
▼ ▼
536
+
┌──────────┐ ┌────────────┐
537
+
│ lateinit │ │ Nullable? │
538
+
└──────────┘ └────────────┘
539
+
```
540
+
541
+
**단계별 질문:**
506
542
507
543
1. **값이 불변(Immutable)인가?** → `Yes`:**`by lazy`** 사용.
508
544
2. (No) **값이 가변(Mutable)이면서, 절대 `null`이 되지 않음이 보장되는가?** → `Yes`:**`lateinit`** 사용.
0 commit comments