본문 바로가기
프로그래머로의 여정

뷰(View) 시스템와 Jetpack Compose

by nunaaa 2025. 10. 20.

뷰(View) 시스템Jetpack Compose는 안드로이드에서 사용자 인터페이스(UI)를 구성하는 두 가지 주요 방식입니다. 뷰 시스템은 전통적이고 명령적인(Imperative) 방식이며, Jetpack Compose는 최신 선언적(Declarative) 방식입니다.


1. 뷰(View) 시스템 (전통적인 방식)

뷰 시스템은 안드로이드가 출시된 초기부터 사용되어 온 전통적인 UI 구성 방식입니다.

주요 개념

  • View 및 ViewGroup:
    • View는 화면에 표시될 수 있는 텍스트, 이미지, 버튼 등 모든 기본 UI 구성 요소입니다. (TextView, Button, ImageView 등).
    • ViewGroup은 다른 ViewViewGroup을 담을 수 있는 컨테이너 역할을 하며, 자식 뷰들의 레이아웃 구조(배치)를 정의합니다 (LinearLayout, ConstraintLayout 등).
    • 이들은 뷰 계층 구조(View Hierarchy)를 형성합니다.
  • 명령적(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 개발 트렌드를 반영하며, 안드로이드 개발의 생산성과 코드 품질을 향상시키는 것을 목표로 합니다.