StateFlow와 SharedFlow 차이: 안드로이드에서 상태와 이벤트를 왜 나눠야 할까
StateFlow와 SharedFlow 차이는 문법보다 역할에서 갈립니다. 이 글에서는 화면 상태와 일회성 액션을 왜 나눠야 하는지, 재구독과 replay 때문에 어떤 버그가 생기는지, ViewModel과 Compose에서는 어떻게 나누는 편이 안전한지 실무 기준으로 정리합니다.
StateFlow와 SharedFlow 차이는 문법보다 역할에서 갈립니다. 이 글에서는 화면 상태와 일회성 액션을 왜 나눠야 하는지, 재구독과 replay 때문에 어떤 버그가 생기는지, ViewModel과 Compose에서는 어떻게 나누는 편이 안전한지 실무 기준으로 정리합니다.
상속보다 조합이 더 나은 순간은 분명합니다. 이 글에서는 객체지향 설계에서 조합을 고르는 기준을 변경 비용, 역할 재사용, 위임, 치환 가능성, 옵션 조합 관점으로 실무적으로 정리합니다.
그리디 선택 기준을 어떻게 잡아야 하는지, 반례로 무엇을 걸러야 하는지, 교환 논증으로 왜 맞는지 쉽게 이해할 수 있게 단계적으로 정리합니다.
리스코프 치환 원칙(LSP)을 상속 문법이 아니라 계약과 치환 가능성 관점에서 다시 설명합니다. 상속이 자연스러운지 판단하는 실전 질문과 구체적인 위반 사례까지 함께 정리합니다.
누적합과 차분 배열이 각각 언제 필요한지, 구간 합과 구간 업데이트 문제를 어떤 기준으로 나눠 생각해야 하는지, 그리고 difference array를 누적해 실제 배열로 복원하는 흐름까지 쉬운 예시로 설명합니다.
코틀린에서는 named argument와 default parameter 덕분에 Builder가 덜 자주 필요합니다. 하지만 단계적 조립, 검증, 중첩 구조, Java 호환성까지 고려하면 Builder와 DSL 스타일이 여전히 유효한 순간이 있습니다.