~/VibeHandbook
무료 PDF

앱 / 모바일

developer.android.com

Android (Jetpack Compose)

무엇인가

가구를 하나하나 직접 옮기는 대신, 완성된 방의 모습을 인테리어 디자이너에게 설명한다고 상상해보라("창문 아래에 파란 소파"). Jetpack Compose도 같은 방식으로 동작한다. 이는 Android의 현대적이고 선언적인 UI「사용자 인터페이스 — 화면에 보이는 부분」 툴킷이다. 별도의 마크업 파일로 레이아웃을 정의하고 뷰 참조를 통해 변경하는 대신, 주어진 상태에 대해 UI가 어떻게 보여야 하는지를 기술하는 컴포저블 Kotlin 함수를 작성한다. 그러면 프레임워크가 그 상태가 바뀔 때마다 화면을 다시 그린다. 이제는 네이티브 Android 인터페이스를 만드는 Google의 권장 방식이다. 내비게이션·라이프사이클·데이터를 위한 더 넓은 Jetpack 라이브러리들과 함께 동작한다.

강점

  • 선언적이고 Kotlin 네이티브 — UI와 로직이 한 언어 안에 살며, XML 레이아웃이 없다.
  • 상태 기반 재구성(recomposition)이 화면을 자동으로 동기화한다.
  • 기존 View 시스템보다 보일러플레이트가 적고, 강력하고 조합 가능한 구성 요소를 제공한다.
  • 내장된 Material Design 컴포넌트, 테마, 애니메이션, 접근성을 제공한다.
  • 기존 View 기반 코드와 상호 운용되므로 점진적으로 도입할 수 있다.

트레이드오프

  • 재구성 동작이 미묘할 수 있다. 상태를 잘못 두면 과도한 재그리기나 버그가 생긴다.
  • 비교적 최신 Android 툴링과 최소 SDK「소프트웨어 개발 키트 — 앱을 만들 때 쓰는 도구·라이브러리 묶음」 설정이 필요하다.
  • 사고 모델이 기존의 명령형 방식과 달라 학습 곡선이 있다.
  • 일부 성숙한 View 전용 라이브러리는 여전히 상호 운용 래퍼가 필요하다.

어디에 가장 좋은가

Jetpack Compose는 현대적이고 유지보수하기 좋은 코드베이스와 빠른 반복을 원하는 새 네이티브 Android 앱에 적합한 선택이다. Kotlin 및 코루틴과 자연스럽게 어울린다.

바이브 코딩 적합성

Compose는 AI 보조 개발에 잘 맞는다. 컴포저블이 상태에 대한 작고 순수한 함수라서, 따로 떼어 생성하고 미리 보고 검증하기 쉽기 때문이다. 어시스턴트에게 컴포저블 밖으로 상태를 끌어올리도록(값은 아래로, 이벤트는 위로) 요청하고, 각 컴포저블의 책임을 좁게 유지하며, 리스트는 불변 데이터로 구동하도록 시켜라. @Preview 애너테이션을 쓰면 앱 전체를 실행하지 않고도 생성된 UI를 눈으로 확인할 수 있어 피드백 루프가 짧아진다.

@Composable
fun Counter() {
    var count by remember { mutableStateOf(0) }
    Column {
        Text("Count: $count")
        Button(onClick = { count++ }) { Text("Add") }
    }
}