안드로이드 앱

안드로이드 젯팩 컴포즈 스터디 시작.

스무비 2025. 11. 23. 22:39
반응형

 

내가 알고 있는 안드로이드 앱 개발방법은 layout.xml 에 layout 을 정의하고, View컴포넌트의 배치 및 속성을 설정한 후, 액티비티 클래스에서 리소스(layout 및 View컴포넌트)에 해당하는 인스턴스를 생성하여 이벤트처리 로직을 구현하는 방식이다. 근데, 최신 안드로이드 앱 개발기술에 대해서 검색을 하다보니, 젯팩 컴포즈라는 것을 활용하여 xml 없이 코틀린 코드만을 사용하여 쉽고 빠르게 UI 를 선언적으로 구성할수 있다고 한다. (과거의 방식도 여전히 사용할수는 있다)

 

그래서 최신 기법(?)인 젯팩 컴포즈가 무엇인지 살펴보고, 스터디한 내용을 기록으로 남겨보고자 한다.

Android Jetpack Compose

아래에 정리할 내용은 다음과 같다.

  1. 젯팩 컴포즈란?
  2. 젯팩 컴포즈의 장단점
  3. 젯팩 컴포즈의 등장배경

 


1) 젯팩 컴포즈란?

안드로이드는 구글거니까 Gemini 한테 물어봐야지

위와 같이 Gemini 에게 질문을 해보았다.

Jetpack Compose는 Android의 사용자 인터페이스(UI)를 구축하기 위한 현대적인 선언형(Declarative) UI 툴킷입니다. 기존의 XML 기반 명령형(Imperative) 방식 대신, Kotlin을 사용하여 UI를 직접 코드로 작성할 수 있게 해줍니다.

 

2) 젯팩 컴포즈의 장단점

Gemini 가 아래와 같이 장/단점을 잘 작성해주었는데, 내가 생각했을때 직접적으로 느껴지는 장점은 액티비티를 구성하는 다양한 UI 컴포넌트들의 상태 데이터에 대한 관리를 시스템이 알아서 해준다는 점이다. 화면에 보이는 여러개의 텍스트, 버튼들이 모두 완벽하게 동기화되어 동작을 해야 하는데, 이를 위해 각 컴포넌트별 "초기값", "현재값"을 관리하는 것은 꽤 번거로운 일이다.

이런 부분을 시스템이 알아서 처리해준다면, 앱 개발자는 좀더 '비즈니스 로직'에 집중할 수 있게 될 것이다.

 

단점으로 몇가지를 언급하고 있는데, 하나하나씩 살펴보면.

1) 초기 학습 곡선은... 쓰다보면 해결될 문제라 이건 제외.

2) 젯팩 컴포즈는 구글에서 밀고 있는 차세대 앱 개발 방식인만큼 현재가 아니라 미래를 바라본다면 생태계 및 성숙도 이슈도 미래에는 이슈가 아닐것이라 생각한다.

3) 성능최적화의 경우, 젯팩 컴포즈에 대한 동작방식을 제대로 이해하지 못하고 사용하는 경우 발생하는 이슈로 생각되는데, 젯팩 컴포즈에 국한된 문제가 아니라, 기존 앱 개발방식에서도 동일하다고 생각된다. (라이브러리 사용법을 제대로 숙지하지 못하면 다 발생하는 문제임)

장점
  • 선언형(Declarative) 패러다임:
    • UI를 구성하는 코드가 데이터의 현재 상태를 선언하며, 상태가 변경될 때마다 시스템이 자동으로 UI를 업데이트합니다. 이로 인해 코드의 양이 줄어들고, 상태 관리 및 동기화가 훨씬 쉬워집니다.
  • Kotlin 기반:
    • Kotlin 언어의 강력한 기능(e.g., DSL, Coroutine)을 활용하여 더 간결하고 안전한 코드를 작성할 수 있습니다.
  • 개발 속도 향상:
    • XML 레이아웃, findViewById(), 데이터 바인딩 등의 번거로운 작업을 줄여 개발자가 UI 구현에 더 집중할 수 있게 해줍니다.
    • 미리보기(Preview) 기능이 강력하여 기기 없이도 다양한 UI 상태를 빠르게 확인할 수 있습니다.
  • 플랫폼 독립적 컴포넌트 가능성:
    • UI가 안드로이드 뷰 시스템에 덜 종속되어 있어, 향후 멀티플랫폼 (e.g., Compose for Desktop, Compose for Web) 확장 가능성이 높습니다.
  • 새로운 테마/디자인 시스템:
    • Material Design 3를 기본적으로 지원하며, 테마 커스터마이징이 용이합니다.
단점
  • 학습 곡선:
    • 기존 안드로이드 개발자에게는 명령형 방식에서 선언형 방식으로의 사고방식 전환이 필요하여 초기 학습 곡선이 존재합니다.
  • 생태계 및 성숙도:
    • XML 기반의 레거시 코드 및 라이브러리에 비해 아직 생태계가 완전히 성숙되지 않았을 수 있습니다. (하지만 빠르게 발전 중입니다.)
  • 성능 최적화:
    • 복잡하거나 최적화되지 않은 컴포저블(Composable) 구성 시, 불필요한 리컴포지션(Recomposition) 발생으로 인해 성능 문제가 발생할 수 있으며, 이에 대한 이해와 관리가 필요합니다.

 

 

3) 젯팩 컴포즈 등장배경

위에서도 언급을 했지만, 기존 Android 개발에서 UI 컴포넌트를 XML에 분리하여 명시하고, 각 View 컴포넌트의 상태 변경 로직을 수동으로 적용하는 방식은 복잡하고 까다롭다. 점점 더 복잡하고 동적인 앱 화면을 쉽게 구성하기 위해 더 직관적이며 편리한 개발 경험을 제공하기 위한 구글의 솔루션이 Jetpack Compose 인 것이다.

 

난 써본적없지만, 이미 iOS 의 SwiftUI 나, 웹의 React 는 데이터기반 선언형 UI 패러다임을 채용하고 있다고 하니, 이런 방식을 안드로이드 앱에 적용하는 것이 별로 새로울 것도 아닌것이다.

 

1) 기존 Android UI 개발의 한계 (XML + View System)

  • 명령형(Imperative) UI:
    • UI의 상태를 변경할 때마다 개발자가 직접 뷰(View)를 찾아서(e.g., findViewById) 속성을 변경하는 방식이었습니다. 이는 코드의 양을 늘리고, **UI 상태와 실제 데이터 상태 간의 불일치(동기화 문제)**를 야기하기 쉬웠습니다.
  • 복잡한 상태 관리:
    • 데이터 변화에 따라 UI를 업데이트하는 로직이 복잡해지면서 버그 발생 가능성이 높았습니다.
  • 느린 개발 속도와 높은 유지보수 비용:
    • XML 파일과 Kotlin/Java 코드를 왔다 갔다 해야 했으며, 미리보기 기능이 제한적이었습니다.

2) 모바일 개발 트렌드의 변화

  • 선언형 UI 패러다임의 등장:
    • Apple의 SwiftUI나 웹의 React와 같이, 데이터 기반의 선언형 UI 패러다임이 현대 개발의 표준으로 자리 잡았습니다. 이 방식은 UI를 더 예측 가능하고 쉽게 관리할 수 있게 해줍니다.
  • Kotlin 채택과 활용:
    • Google이 Android 개발의 주 언어로 Kotlin을 채택하면서, Kotlin의 간결함과 안전성을 극대화할 수 있는 UI 툴킷의 필요성이 대두되었습니다.

 

젯팩 컴포즈를 공부해보자

자 그러면, 5년전에 구입한 안드로이드 앱 개발서적은 잠시 덮어두고..... 젯팩 컴포즈를 공부해봐야겠다.

(요즘 사람들은 유튜브나 온라인 강의부터 들을것 같은데) 난 개발서적부터 검색해봤다.

교보문고 가서 1)최신 서적이면서, 2)표지가 이쁜걸로 골랐다. (에이콘 출판사에는 죄송합니다...)

교보문고 "젯팩 컴포즈" 검색 결과

 

스터디 계획을 짜기위해 책 목차를 살펴봤다.

  • Ch1~9: 안드로이드 스튜디오 설치 및 사용법 및 컴포즈에 대한 간단한 소개
  • Ch10~17: 안드로이드 아키텍처 및 코틀린 언어에 대한 설명
  • Ch18~52: 젯팩 컴포즈에 대한 모든(?) 것    스터디 해야 할 부분
  • Ch53: 머티리얼 디자인3
  • Ch54: 안드로이드 앱 배포
  • Ch55: 안드로이드 스튜디오의 그레이들(Gradle)

안드로이드 스튜디오는 이미 다른 책보면서 설치해놓기도 했고, 구글링을 해보면 이 부분에 대해서는 워낙에 잘 설명해놓은 블로그가 많았다. 내가 굳이 이 부분을 정리할 필요는 없을것 같다.

 

코틀린에 대해서는 정리가 한번 필요하긴 한데, 프로그래밍 언어 자체의 특징이나 문법 공부를 하다보면 지루하기도 하고 흥미도 금방 떨어질수 있으니, 젯팩 컴포즈 공부하면서 그때그때 모르는 문법 나오면 정리를 하는게 좋겠다.

이미 코틀린에 대해서는 퀵(?) 하게 보고 있는 중이다.
- 코틀린 퀵하게 살펴보기 (1)

 

Ch18~52 영역이 젯팻 컴포즈에 대한 부분이니 여기를 집중적으로 공부하고 내용을 정리해놓자.

 

시작해보자. Spark. Then. Move !

 

 

반응형