뷰(View) 시스템와 Jetpack Compose는 안드로이드에서 사용자 인터페이스(UI)를 구성하는 두 가지 주요 방식입니다. 뷰 시스템은 전통적이고 명령적인(Imperative) 방식이며, Jetpack Compose는 최신 선언적(Declarative) 방식입니다.
1. 뷰(View) 시스템 (전통적인 방식)
뷰 시스템은 안드로이드가 출시된 초기부터 사용되어 온 전통적인 UI 구성 방식입니다.
주요 개념
- View 및 ViewGroup:
- View는 화면에 표시될 수 있는 텍스트, 이미지, 버튼 등 모든 기본 UI 구성 요소입니다. (
TextView,Button,ImageView등). - ViewGroup은 다른
View나ViewGroup을 담을 수 있는 컨테이너 역할을 하며, 자식 뷰들의 레이아웃 구조(배치)를 정의합니다 (LinearLayout,ConstraintLayout등). - 이들은 뷰 계층 구조(View Hierarchy)를 형성합니다.
- View는 화면에 표시될 수 있는 텍스트, 이미지, 버튼 등 모든 기본 UI 구성 요소입니다. (
- 명령적(Imperative) 방식: UI를 업데이트할 때 개발자가 직접 뷰를 찾고(예:
findViewById), 해당 뷰의 속성을 수동으로 변경해야 합니다. 즉, "이렇게 바꿔라"라고 명령하는 방식입니다.- 예시: 버튼의 텍스트를 바꾸려면, 버튼 객체를 찾아서
.setText("새 텍스트")를 호출해야 합니다.
- 예시: 버튼의 텍스트를 바꾸려면, 버튼 객체를 찾아서
- XML 레이아웃: 일반적으로 UI 구조는 XML 파일에 정의하며, 뷰의 속성과 계층 관계를 기술합니다. 실제 로직은 Kotlin/Java 코드에서 처리합니다.
- 상태 관리: 앱의 데이터(상태)가 변경될 때마다 개발자가 수동으로 UI 요소를 조작하여 화면을 업데이트해야 합니다. 이는 복잡한 UI에서 버그 발생 가능성을 높이고 코드를 장황하게 만들 수 있습니다.
2. Jetpack Compose (최신 방식)
Jetpack Compose는 안드로이드 UI 개발을 단순화하고 가속화하기 위해 Google에서 권장하는 최신 툴킷입니다. Kotlin 언어를 사용하여 UI를 직접 구축합니다.
주요 개념
- Composable 함수: UI를 구성하는 기본 단위는
@Composable어노테이션이 붙은 함수입니다. 이 함수들은 UI가 주어진 상태에서 어떻게 보여야 하는지를 기술합니다. - 선언적(Declarative) 방식: 개발자가 원하는 UI 상태를 선언하면, 프레임워크가 상태 변화에 따라 UI를 자동으로 업데이트합니다. 개발자는 뷰를 수동으로 조작할 필요가 없습니다. 즉, "이 상태일 때는 이렇게 보여야 한다"라고 선언하는 방식입니다.
- 재구성(Recomposition): 앱의 상태(State)가 변경되면, Compose는 해당 상태를 사용하는 Composable 함수만 효율적으로 다시 실행하여 UI를 업데이트합니다. 이 과정을 재구성(Recomposition)이라고 합니다. 불필요한 전체 뷰 계층 구조의 재구성을 피하여 성능을 최적화합니다.
- Kotlin 기반: UI 정의가 XML 파일이 아닌 Kotlin 코드로 직접 이루어집니다. 이로써 UI와 로직이 한 언어 내에서 통합되어 코드의 일관성과 유지보수성이 향상됩니다.
- Modifier: UI 요소의 크기, 패딩, 클릭 리스너 등의 속성을 지정할 때 Modifier 객체를 사용하며, 이를 통해 속성을 연결(chaining)하는 방식으로 간결하게 스타일을 적용할 수 있습니다.
뷰 vs. Compose 비교 요약
| 특징 | 뷰(View) 시스템 | Jetpack Compose |
|---|---|---|
| UI 정의 방식 | 명령적(Imperative) | 선언적(Declarative) |
| 주요 언어 | XML 및 Kotlin/Java | Kotlin (코드 내에서 UI 정의) |
| 상태 관리 | 수동 조작 (findViewById, .setText()) |
상태(State) 변화에 따른 자동 업데이트 (Recomposition) |
| 코드 분리 | UI(XML)와 로직(Kotlin/Java) 분리 | UI와 로직이 Kotlin 코드로 통합 |
| 복잡성/장황함 | 복잡한 계층 구조(Hierarchy), 많은 보일러 플레이트 코드 | 간결함, 적은 보일러 플레이트 코드, 평탄한 구조 |
| 개발 속도 | 상대적으로 느림 | Live Preview 등 지원으로 빠름 |
| 학습 곡선 | 전통적이지만, 복잡한 계층 구조 이해 필요 | 최신 패러다임(React, Flutter 등과 유사) 이해 필요 |
Jetpack Compose는 현대적인 UI 개발 트렌드를 반영하며, 안드로이드 개발의 생산성과 코드 품질을 향상시키는 것을 목표로 합니다.
'프로그래머로의 여정' 카테고리의 다른 글
| 뷰바인딩(View Binding)이란? (0) | 2025.10.20 |
|---|---|
| LinearLayout vs RelativeLayout in Android Studio (0) | 2025.10.20 |
| XML vs. JSON 비교 (1) | 2025.10.19 |
| 소스 코드 빌드(Build)란 (0) | 2025.10.19 |
| Android 프레임워크 컴포즈(Compose) (1) | 2025.10.18 |