관리 메뉴

나만을 위한 블로그

[Android Compose] Compose란? 본문

Android/Compose

[Android Compose] Compose란?

참깨빵위에참깨빵 2022. 12. 31. 03:16
728x90
반응형

안드로이드에서 화면을 그리는 것은 XML에 그리는 것이 일반적이었고, 필요하다면 소스코드 상에서 동적으로 만들어 사용하는 방식을 사용했다.

그러나 이것이 상당히 귀찮고 번거롭기 때문인지 XML 대신 사용할 수 있는 안드로이드 화면 그리기 도구가 2018년 구글 I/O에서 공개됐다. 이것이 Compose다.

Compose의 사전적 정의는 아래와 같다.

 

구성하다(몇 가지 부분이나 요소들을 모아서 일정한 전체를 짜 이루다)

 

프라모델 조립이나 퍼즐이 생각나는 단어다. 어떤 것들을 합쳐서 큰 하나를 만드는 뉘앙스라 Compose가 어떤 식으로 작동할지 조금 상상이 간다.

아래는 안드로이드 디벨로퍼에서 설명하는 Compose다.

 

https://developer.android.com/jetpack/compose

 

Jetpack Compose UI 앱 개발 도구 키트 - Android 개발자  |  Android Developers

앱 작성 속도를 높이는 데 도움이 되는 Android의 UI 앱 개발 도구 키트와 리소스인 Jetpack Compose를 살펴보세요.

developer.android.com

Jetpack Compose는 네이티브 UI를 빌드하기 위한 안드로이드의 최신 권장 도구 키트다. Compose는 안드로이드 UI 개발을 간소화하고 가속화한다

 

 

적은 코드로 화면을 빨리 만들 수 있다는 것과 제트팩에 속한다는 것이 눈에 띈다. 좀 더 자세한 설명을 써놓은 디벨로퍼 페이지를 확인해본다.

 

https://developer.android.com/jetpack/compose/mental-model

 

Compose 이해  |  Jetpack Compose  |  Android Developers

Compose 이해 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Jetpack Compose는 Android를 위한 현대적인 선언형 UI 도구 키트입니다. Compose는 프런트엔드 뷰를 명령

developer.android.com

Jetpack Compose는 안드로이드를 위한 현대적인 선언형 UI 도구 키트다. Compose는 프론트엔드 뷰를 명령형으로 변형하지 않고도 앱 UI를 렌더링할 수 있게 하는 선언형 API를 제공해서 앱 UI를 더 쉽게 작성하고 유지관리할 수 있게 지원한다

선언형 프로그래밍 패러다임

지금까지 안드로이드 뷰 계층 구조는 UI 위젯의 트리로 표시할 수 있었다. 사용자 상호작용 등의 이유로 인해 앱 상태가 바뀌면 현재 데이터를 표시하기 위해 UI 계층 구조를 업데이트해야 한다. UI를 업데이트하는 가장 일반적인 방법은 findViewById() 같은 함수를 써서 트리를 탐색하고 setText(), addChild(), setImageBitmap() 같은 메서드를 호출해 노드를 변경하는 것이다. 이런 메서드는 위젯의 내부 상태를 변경한다.
뷰를 수동 조작하면 오류가 발생할 가능성이 커진다. 데이터를 여러 위치에서 렌더링한다면 데이터를 표시하는 뷰 중 하나를 업데이트하는 걸 잊기 쉽다. 또한 두 업데이트가 예기치 않은 방식으로 충돌할 경우 잘못된 상태를 야기하기도 쉽다. 예를 들어 업데이트가 UI에서 방금 삭제된 노드의 값을 설정하려고 할 수 있다. 일반적으로 업데이트가 필요한 뷰의 수가 많을수록 소프트웨어 유지관리 복잡성이 증가한다.
지난 몇 년에 걸쳐 업계 전반에서 선언형 UI 모델로 전환하기 시작했으며 이에 따라 UI 빌드 및 업데이트와 관련된 엔지니어링이 크게 간소화됐다. 이 기법은 처음부터 화면 전체를 개념적으로 재생성한 후 필요한 변경사항만 적용하는 방식으로 작동한다. 이런 접근 방식은 Stateful 뷰 계층 구조를 수동 업데이트할 때의 복잡성을 방지할 수 있다. Compose는 선언형 UI 프레임워크다.
화면 전체를 재생성하는 데 있어 한 가지 문제는 시간, 컴퓨팅 성능 및 배터리 사용량 측면에서 잠재적으로 비용이 많이 든다는 것이다. 이 비용을 줄이기 위해 Compose는 특정 시점에 UI의 어떤 부분을 다시 그려야 하는지를 지능적으로 선택한다. 이는 재구성에 설명된 대로 UI 구성요소를 디자인하는 방식에 몇 가지 영향을 준다...(중략)

 

이 페이지의 내용이 너무 많고 코드 스니펫도 여러 개 있기 때문에 직접 페이지에 들어가서 확인하는 게 더 나을 것 같다.

작동 방식을 보면 리액트가 떠오른다. 리액트도 처음부터 끝까지 화면을 다 그리는 게 아니라 수정된 부분만 업데이트하기 때문이다.

 

그리고 Compose는 선언형이기 때문에 코틀린 코드만으로 화면을 그려서 XML이 필요없다. Compose를 사용하면 아래의 것들이 상대적으로 덜 또는 완전히 필요없어진다.

 

  • XML
  • 데이터 바인딩
  • 프래그먼트

 

예를 들어 리사이클러뷰를 만들어야 한다면 코틀린 + XML 기반으로는 아래와 같이 만들어야 하는 파일들이 많다.

 

 

그러나 Compose를 쓴다면 아래와 같이 많이 간략해진다.

 

 

필요한 곳에 Compose를 쓴다면 앱 개발 공수가 많이 줄어들 것 같다.

반응형

'Android > Compose' 카테고리의 다른 글

[Android Compose] Box란?  (0) 2023.02.03
[Android Compose] Row란?  (0) 2023.02.03
[Android Compose] Modifier란?  (0) 2022.07.10
[Android Compose] LazyColumn이란?  (0) 2022.07.10
[Android Compose] Column이란?  (0) 2022.07.08
Comments