Android (Jetpack Compose)
무엇인가
Jetpack Compose는 Android의 현대적이고 선언적인 UI 툴킷이다. XML로 레이아웃을 정의하고 뷰 참조를 통해 변경하는 대신, 주어진 상태에 대한 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") }
}
}