[Android][Kotlin][Compose] 안드로이드 컴포즈

승민·2022년 4월 22일
0

Android

목록 보기
3/4

💡 안드로이드 컴포즈가 뭐야?

안드로이드 관련 자료들을 찾아보면 안드로이드 컴포즈에 관한 글이나 자료가 굉장히 많습니다. 기업의 채용 공고를 찾아봐도 android compose를 다루는 능력을 요구하는 회사가 굉장히 많았습니다. 도대체 안드로이드 컴포즈는 뭘까요? 구글 공식 문서에 따르면 다음과 같이 컴포즈에 대해 소개하고 있습니다.

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

🤔 왜 쓰는걸까?

그렇다면 컴포즈는 왜 사용하는 걸까요? 기존의 UI를 작성하는 XML파일 방식과는 어떤 차이점이 있는걸까요? 구글 공식 문서에 따르면 다음과 같은 장점들로 컴포즈를 사용한다고 합니다.

  • 코드 감소
    코드를 적게 작성하면 개발의 모든 단계에 영향을 미칩니다. 작성자는 테스트와 디버그 작업과 버그 발생 가능성이 줄어들어 당면 문제에 집중할 수 있게 되며 검토자 또는 유지관리자는 읽고, 이해하고, 검토하고, 유지관리할 코드가 적어집니다.
  • 직관적
    Compose는 선언적 API를 사용합니다. 즉, Compose가 나머지를 처리하므로 UI를 설명하기만 하면 됩니다. API는 직관적이므로 찾아서 사용하기가 쉽습니다.
  • 빠른 개발 과정
    Compose는 기존의 모든 코드와 호환됩니다. Compose에서 Views를, Views에서 Compose 코드를 호출할 수 있습니다. Navigation, ViewModel, Kotlin 코루틴과 같은 대부분의 일반적인 라이브러리는 Compose와 함께 작동하므로 언제 어디서든 원하는 대로 채택할 수 있습니다.
  • 강력한 성능
    Compose는 Android 플랫폼 API에 직접 액세스하고 머티리얼 디자인, 어두운 테마, 애니메이션 등을 기본적으로 지원하여 멋진 앱을 만들 수 있습니다.

실제로 구글에서 제공하는 튜토리얼 문서를 따라 안드로이드 컴포즈를 살짝 사용해 보았을 뿐인데 위와 같은 장점들을 느낄 수 있었습니다. 너무 흥미롭고 신기해서 컴포즈에 대해서 이것저것 찾아보다가 구글이 왜 컴포즈에 힘을 싣고 있는지 알게되었습니다. 구글이 컴포즈를 만들고 빠르게 개발하는 이유는 크게 3가지 입니다.

1. XML 파일을 사용하지 않는 UI 작성

기존의 XML 파일을 통해 UI를 작성하는 경우(명령형 UI) findViewById와 같이 데이터와 뷰 사이에 추가적인 레이어가 필요합니다. 하지만 컴포즈를 사용하면 추가적인 레이어 없이 데이터를 바로 UI에 적용할 수 있습니다.

2. 선언형 UI

선언형 프로그래밍이란 기존의 명령형 프로그래밍을 세련되게 추상화한 것이라고 볼 수 있습니다. 기존의 명령형 프로그래밍에서는 컴퓨터에게 원하는 명령을 내리기 위해서 a to z까지 세세하게 명령을 내려야 했습니다. 하지만 선언형 프로그래밍에서는 일일이 명령하는 것이 아니라 원하는 기능을 선언하기만 하면 알아서 컴퓨터가 처리해줍니다. 안드로이드의 XML 파일은 이미 선언형 프로그래밍 방식이지만 이미 선언한 UI를 동적으로 변경하는 것은 매우 복잡했습니다. 하지만 컴포즈는 선언형 프로그래밍을 사용함과 동시에 굉장히 쉽게 동적으로 UI를 변경할 수 있습니다.

명령형 프로그래밍 예시

val myList = listOf(1,2,3)
val targetList = mutableListOf<Int>()
for (i in myList) {
    if (i % 2 == 0) tempList.add(i)
}

선언형 프로그래밍 예시

val targetList = listOf(1,2,3).filter { it % 2 == 0 }

3. 상속이 아닌 확장

기존의 안드로이드 UI의 뷰는 모두 상속으로 이루어져 있었습니다. 하드웨어가 발달하고 복잡한 뷰들이 등장하면서 상속에 대한 관계도 애매해졌습니다. 예를 들어 Button은 TextView를 상속받은 것인데 Button 안의 Text를 고치기 위해 Button의 부모인 TextView로 가서 Text를 고치는 것은 안됩니다. 이를 컴포즈는 해결해줍니다.

참고한 블로그

profile
안녕하세요 승민입니다

0개의 댓글