StateFlow와 SharedFlow 차이: 안드로이드에서 상태와 이벤트를 왜 나눠야 할까
StateFlow와 SharedFlow 차이는 문법보다 역할에서 갈립니다. 이 글에서는 화면 상태와 일회성 액션을 왜 나눠야 하는지, 재구독과 replay 때문에 어떤 버그가 생기는지, ViewModel과 Compose에서는 어떻게 나누는 편이 안전한지 실무 기준으로 정리합니다.
StateFlow와 SharedFlow 차이는 문법보다 역할에서 갈립니다. 이 글에서는 화면 상태와 일회성 액션을 왜 나눠야 하는지, 재구독과 replay 때문에 어떤 버그가 생기는지, ViewModel과 Compose에서는 어떻게 나누는 편이 안전한지 실무 기준으로 정리합니다.
리스코프 치환 원칙(LSP)을 상속 문법이 아니라 계약과 치환 가능성 관점에서 다시 설명합니다. 상속이 자연스러운지 판단하는 실전 질문과 구체적인 위반 사례까지 함께 정리합니다.
코틀린에서는 named argument와 default parameter 덕분에 Builder가 덜 자주 필요합니다. 하지만 단계적 조립, 검증, 중첩 구조, Java 호환성까지 고려하면 Builder와 DSL 스타일이 여전히 유효한 순간이 있습니다.
SavedStateHandle을 모든 상태 저장 도구처럼 쓰면 구조가 무거워지고, 반대로 전혀 쓰지 않으면 process death 대응이 약해집니다. 이 글에서는 navigation args, 검색 조건, 탭 선택 같은 최소 복원 상태를 기준으로 언제 SavedStateHandle이 필요한지 정리합니다.
의존성 역전 원칙(DIP)을 의존 방향, 정책-세부 구현 분리, 변경 비용 기준으로 실무 코드에 맞게 설명합니다.
1편에서는 코틀린 클린코드의 기준을 잡았습니다. 2편에서는 이름 짓기를, 3편에서는 함수…