Android
안드로이드 [Kotlin] - Jetpack Compose 시작 (명령형 UI 구성 vs 선언형 UI 구성)
🤖 Play with Android 🤖
2023. 4. 9. 19:27
728x90
Jetpack Compose의 탄생이유
기존의 명령형 UI 구성 방식
- 기존의 UI를 만드는 방식으로 기존 안드로이드는 트리형태로 뷰를 구성한다.
- 레이아웃을 맨 아래에 깔고 그 위에 브랜치처럼 텍스트뷰, 이미지뷰를 넣고 다시 레이아웃을 넣는 등 쌓아가는 개념으로 뷰를 그렸다.
- 이와 같은 작업 방식은 개발자로 하여금 xml이라는 막대한 리소스를 반복적으로 낭비하게 하며, 노드를 변경하기 위해 findViewById, viewBinding, dataBinding을 통하여 노드에 접근하고 setText(), setImageBitmap( ) 등의 메서드를 사용하여 변경해야 한다.
- 이런 접근 방식은 불필요한 코드를 만들 뿐만 아니라 한 노드에 대한 업데이트의 충돌이 발생할 확률을 높이게 된다.
명령형 UI 구성 방식의 시나리오
- 어떤 변수를 참조하는 UI가 있고, 이벤트에 의해 변수가 변경되었고 UI에 반영해야 한다.
- 명령형 UI 구성 방식은 변경된 내용을 갱신할 것을 UI 객체에 명령한다.
b.setColor(red)
b.clearChildren()
ViewC c3 = new ViewC(...)
b.add(c3)
명령형 UI 방식은 'UI 객체에 대한 갱신을 명령'하는 것이다. 따라서 개발자는 변수와 UI 객체를 정확히 연결하고 관리해야 한다. 만약 새로운 변수나 이벤트 혹은 UI 객체가 추가된다면 그 과정에서 실수가 없도록 연결기를 정확하게 해야 한다.
선언형 UI 구성 방식
- 선언형 UI는 새로 나온 개념으로 화면 전체를 개념적으로 재생성한 후 필요한 변경사항만 적용하는 방식으로 적용된다.
- 선언형 UI에서 중요한 부분은 State 즉 상태라는 개념이다.
- 뷰마다 State가 있고, 이 값을 변경하게 되면 새로운 화면을 생성해서 다시 화면을 업데이트하게 된다. 따라서 개발자는 State변화에만 집중을 하면 된다.
- 이러한 접근 방식은 스테이트풀(Stateful) 뷰 계층 구조를 수동으로 업데이트할 때의 복잡성을 방지할 수 있다.
선언형 UI 구성 방식의 시나리오
- 어떤 변수를 참조하는 UI가 있다. 이벤트에 의해 변수가 변경되었고 UI에 반영해야 한다.
- 이벤트에 의해 변수를 변경해 주면 해당 변수를 참조하고 있는 뷰는 State의 변경에 따라 뷰를 재생성한다.
- 선언형 UI는 명령형 UI와는 달리 변화가 생긴 UI 객체를 다시 생성한다.
- 이로써 얻는 장점은 개발자가 변수와 UI 객체 간의 연결고리에 대하여 고민할 필요가 없다는 점이다.
return ViewB(
color: red,
child: ViewC(...),
)
- 선언형 UI에서 가장 중요한 것은 위 공식이다.
- ‘위젯 또는 함수’의 인자로 상태를 넘겨주면, 그에 맞는 View를 생성한다.
- 함수형 프로그래밍 개념의 순수 함수처럼 같은 상태에 대해서는 항상 똑같은 View를 리턴하게 된다.
Jetpack Compose 란
- Jetpack Compose는 구글에서 개발한 모던한 안드로이드 개발을 위한 선언형 UI Toolkit이다.
- 2021년 8월에 1.0.0 스테이블 버전이 정식 출시되었으며, 공식적으로 프로덕션에 적용 가능하게 되었다.
구글에서 설명하는 Compose를 이용 시 얻을 수 있는 장점은 아래와 같다.
Less Code - 코드 감소
- 적은 수의 코드로 더 많은 작업을 하고 전체 버그 클래스를 방지할 수 있으므로 코드가 간단하며 유지 관리하기 쉽다.
Intuitive - 직관적
- UI만 설명하면 나머지는 Compose에서 처리한다.
- 앱 상태가 변경되면 UI가 자동으로 업데이트되게 된다.
Accelerate Development - 빠른 개발 과정
- 기존의 모든 코드와 호환되므로 언제 어디서든 원하는 대로 사용할 수 있다.
- 실시간 미리 보기 및 Android 스튜디오 지원으로 빠른 개발을 지원한다.
Powerful - 강력한 성능
- Android 플랫폼 API에 직접 액세스 하고 머티리얼 디자인, 다크 테마, 애니메이션 등을 기본적으로 지원하는 멋진 앱을 만들 수 있다.