[Android] 소리치는 클린 아키텍처, MVI 그리고 Jetpack Compose

클린 아키텍처 원칙에서, 좋은 아키텍처에서는 유즈케이스가 명확하게 정의되어 있어야 하며, 이를 통해 프로그램이 수행하는 작업이 분명하게 드러나야 한다고 강조합니다. 이는 설계가 '소리치는' 것과 같다고 표현합니다.
MVI(Model-View-Intent) 패턴을 활용하면, 화면 구성에서 input과 output이 명확해집니다. 이는 화면에 무엇이 표시되고, 어떤 작업들을 수행하는지(어떤 이벤트를 발생시키는지) 코드가 ‘소리치도록’ 만듭니다.
더 나아가, UDF(Unidirectional Data Flow)원칙을 지키며 화면과 컴포넌트를 구성하면, 각 화면의 최상위 컴포넌트(일반적으로 screen level)에서 뷰모델로 주입받은 유즈케이스를 익명 함수로 감싸 각 컴포넌트에 전달할 수 있습니다.
그러고보니까, 컴포저블 컴포넌트도 소리칠 수 있습니다. 잘 작성한 컴포저블 컴포넌트는 어떤 일을 할 수 있는지, 어떤 정보를 보여줄 수 있는지를 그 이름과 파라미터에서 잘 드러냅니다. 이런 접근 방식은 재사용 가능한 컴포넌트의 개발을 가능하게 하며, 이는 컴포즈의 핵심 철학에 잘 맞는다고 할 수 있습니다.
결론적으로, MVI 패턴은 클린 아키텍처를 실현하는 강력한 도구이고, 컴포즈의 핵심 장점을 잘 활용할 수 있는 패턴이라고 할 수 있습니다.
명확히 드러내기위해 ‘소리친다’는 추상적이고 비유적인 표현을 쓰는것이 조금 우습게 보일지도 모르겠지만, 그래도 명확한 코드를 짜야지! 라던가 무슨 역할을 하는지 잘 드러나느 코드를 짜야지! 라는 표현보다 ‘소리치는 코드를 짜야지!’ 라고 생각하는 쪽이 떠올리기도 좋고, 또 더 와닿는것 같습니다.