Jetpack Compose는 Android 앱 개발을 위한 최신 UI 툴킷으로, 기존의 XML 기반 레이아웃을 대체하는 선언적 UI 방식을 제공합니다. 이 글에서는 Jetpack Compose를 처음 접하는 개발자를 위해 기본 개념, 핵심 기능 및 실습 예제를 소개합니다. Jetpack Compose를 배우기 전에 알고 있어야 할 필수 항목들을 차례대로 정리하였으니, 지금 바로 확인해보세요!
1. Jetpack Compose란?
Jetpack Compose는 UI 구성 요소를 선언적 방식으로 정의할 수 있는 Android의 최신 UI 툴킷입니다. 기존의 XML 레이아웃 대신, Kotlin 코드만으로 UI를 작성할 수 있어 개발자가 더욱 직관적이고 효율적으로 UI를 설계할 수 있습니다.
Jetpack Compose의 특징:
- 선언적 UI: UI의 상태를 선언적으로 표현하고, 상태 변경 시 자동으로 UI를 갱신합니다.
- 단순화된 코드: XML 기반 레이아웃을 제거하고 Kotlin 코드로 UI를 구성하여 코드가 간결해집니다.
- 응답성 높은 UI: Jetpack Compose는 앱의 상태에 따라 UI를 동적으로 업데이트하여 더욱 빠르고 유연한 반응을 제공합니다.
2. Composable 함수
Jetpack Compose에서 UI 구성 요소는 Composable 함수를 사용하여 정의됩니다. @Composable 애노테이션을 사용하여 UI 요소를 정의하면, 이 함수가 화면에 그려지게 됩니다.
Composable 함수 예시
@Composable
fun Greeting(name: String) {
Text(text = "Hello, $name!")
}
이 함수는 텍스트를 출력하는 Composable로, Greeting("Compose")처럼 호출하면 "Hello, Compose!"가 화면에 출력됩니다.
3. State와 재구성 (Recomposition)
Jetpack Compose는 상태 관리가 핵심입니다. State는 UI를 그릴 때 필요한 데이터를 저장하며, State가 변경되면 해당 상태를 참조하는 UI 컴포넌트가 자동으로 재구성됩니다.
State 예시
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text(text = "Count: $count")
}
}
위 예제에서 remember와 mutableStateOf를 사용하여 count 값을 상태로 저장하고, 버튼을 클릭하면 해당 값이 증가하며 UI가 갱신됩니다.
4. Modifier
Modifier는 UI 요소의 속성이나 스타일을 수정할 수 있는 도구입니다. 화면 크기 조정, 배경 색상 변경, 패딩 추가 등 다양한 UI 조작을 할 수 있습니다.
Modifier 예시
@Composable
fun ModifiedButton() {
Button(
onClick = {},
modifier = Modifier
.padding(16.dp)
.fillMaxWidth()
) {
Text("Click Me")
}
}
이 예제에서 Modifier는 버튼에 패딩을 추가하고, 버튼이 화면의 너비를 가득 차도록 만듭니다.
5. Material Design 컴포넌트
Jetpack Compose는 Material Design을 기반으로 한 UI 컴포넌트들을 제공합니다. 버튼, 카드, 텍스트 필드 등 다양한 기본 UI 요소를 손쉽게 사용할 수 있습니다.
Material Design 컴포넌트 예시
@Composable
fun MaterialButton() {
Button(onClick = { /* 클릭 이벤트 */ }) {
Text("Material Button")
}
}
위 예제는 Jetpack Compose에서 제공하는 MaterialButton을 사용하여 UI 요소를 만들었습니다. 간단하게 버튼을 생성하고 클릭 이벤트를 처리할 수 있습니다.
6. Layouts in Jetpack Compose: Column, Row, Box
Jetpack Compose에서 레이아웃은 Column, Row, Box와 같은 기본 레이아웃 컴포저블을 사용하여 정의됩니다. 이들 레이아웃은 UI 요소를 세로, 가로, 또는 겹쳐서 배치할 수 있습니다.
Column 예시 (세로 배치)
@Composable
fun ColumnExample() {
Column(
modifier = Modifier.padding(16.dp)
) {
Text("First Item")
Text("Second Item")
Text("Third Item")
}
}
Row 예시 (가로 배치)
@Composable
fun RowExample() {
Row(
modifier = Modifier.padding(16.dp)
) {
Text("Item 1")
Text("Item 2")
Text("Item 3")
}
}
Box 예시 (겹치기 배치)
@Composable
fun BoxExample() {
Box(
modifier = Modifier.size(200.dp)
) {
Text("First Item", modifier = Modifier.align(Alignment.TopStart))
Text("Second Item", modifier = Modifier.align(Alignment.Center))
}
}
7. Jetpack Compose의 장점
Jetpack Compose는 여러 가지 장점을 제공합니다:
- 간결하고 직관적인 코드: Kotlin 기반으로 UI를 정의하여, 코드가 간결하고 직관적입니다.
- 강력한 상태 관리: 상태 변화에 따라 UI가 자동으로 갱신되므로, 개발자가 수동으로 UI를 갱신할 필요가 없습니다.
- 재사용성 높은 UI 구성 요소: Composable을 활용하여 UI 요소를 재사용할 수 있습니다.
9. 결론
Jetpack Compose는 Android 앱 개발을 훨씬 더 쉽고 직관적으로 만들어주는 툴킷입니다. 선언적 UI를 사용하여 더욱 효율적으로 UI를 설계하고, 상태 관리를 자동으로 처리할 수 있어 개발자에게 많은 이점을 제공합니다. 처음 접할 때는 기본적인 Composable 함수와 상태 관리, 레이아웃 컴포저블을 이해하는 것이 중요합니다.