Android 앱을 향상시키세요: Jetpack Compose와 함께하는 아키텍처 패턴

발행: (2025년 12월 14일 오전 09:36 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Android 아키텍처 패턴이란?

앱 Android 코드를 다음과 같이 조직하도록 권장되는 방식입니다:

  • 더 유지보수하기 쉬움
  • 더 확장 가능함
  • 더 테스트하기 쉬움
  • 팀이 이해하기 쉬움

Kotlin + Jetpack Compose와 함께 Google은 반응형·단방향 아키텍처를 권장합니다.

주요 역할

@Composable 함수

  • 상태만 표시함
  • 비즈니스 로직을 포함하지 않음
  • 상태 변화에 반응함
@Composable
fun HomeScreen(state: HomeState) {
    Text(text = state.title)
}

ViewModel

  • UI 상태를 관리함
  • 프레젠테이션 로직을 포함함
  • 구성 변경을 견딤
  • StateFlow 또는 LiveData를 노출함
class HomeViewModel : ViewModel() {
    private val _state = MutableStateFlow(HomeState())
    val state = _state.asStateFlow()
}

비즈니스 규칙

  • UseCase(사용 사례) – Android와 무관함
  • Repository
    • API (Retrofit)
    • 데이터베이스 (Room)

Compose와 함께 권장되는 아키텍처

UI (Compose)

ViewModel

Repository

Data Source (API / DB)

사용자 액션 흐름

@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
    val state by viewModel.state.collectAsState()

    Button(onClick = { viewModel.loadData() }) {
        Text("Cargar")
    }
}

이 접근 방식의 장점

  • 책임이 명확히 분리됨
  • 테스트가 쉬움
  • Compose에 최적화됨
  • 대규모 앱에서 매우 인기 있음

MVI 패턴 (Model‑View‑Intent)

  • Intent: 사용자의 액션
  • State: 화면 전체 상태
  • Reducer: 상태를 변환함
Intent → ViewModel → Reducer → New State → UI
sealed class HomeIntent {
    object LoadData : HomeIntent()
}

data class HomeState(val loading: Boolean = false)

장점

  • 불변 상태
  • 예측 가능한 흐름
  • 복잡한 UI에 최적화됨

단점

  • 코드와 복잡성이 증가함
  • UI 패턴을 넘어 전체 아키텍처임

계층형 구조

  • Presentation: Compose + ViewModel
  • Domain: UseCases
  • Data: Repository, API, DB

특징

  • 내부 계층이 외부 계층에 의존하지 않음.
  • UI는 데이터 세부 정보를 알지 못함.

장점

  • 확장성 좋음
  • 테스트 용이함
  • 대규모 프로젝트에 최적화됨

MVVM + 단방향 데이터 흐름 + StateFlow + Jetpack Compose

  • ViewModel이 유일한 상태 소스 역할을 함
  • Compose는 상태를 관찰하고 렌더링만 함
  • 상태는 불변임
  • 이벤트는 상태와 분리됨
Event → ViewModel → State → Compose UI

버그를 방지하고 UI를 예측 가능하게 만들어요.

프로젝트 유형별 권장 사항

앱 유형권장 아키텍처
작은 앱MVVM
중간 규모 앱MVVM + Clean
큰 앱MVI + Clean
복잡한 UIMVI

결론

  • Jetpack Compose는 UI에 대한 사고 방식을 바꿉니다.
  • MVVM은 여전히 기본입니다.
  • 상태가 앱의 핵심입니다.
  • 단방향 흐름은 오류를 줄여줍니다.

유용한 링크

Back to Blog

관련 글

더 보기 »

프로필

현재 상태 🟢 인턴십 및 초급 기회에 열려 있음 Mission: 52주 안에 30개의 앱을 만들어 세계 수준의 Android 엔지니어가 되기. 저는 열정입니다...