sitelink1 https://aroundck.tistory.com/7344 
sitelink2  
sitelink3  

Android Jetpack Compose 가 뭐야?

 

기존에는 Android UI Toolkit 전체가 View class 위에 build 되어 있었다.

이는 android 가 생성될 때부터 있었던 일이다.

그래서 View 를 개선하고 싶은 욕구가 있어도 처음부터 새로 만들기가 어려웠다.

 

클라이언트단에서 요구사항들이 많이 있어서 구글은 UI 에 대한 것을 처음부터 다시 구현하기로 했다.

그것이 Android Jetpack Compose lib 이다.

그리고 이것은 React, Litho, Vue, Flutter 등에서 컨셉을 차용했다.

 

 

 

1. Android Platform Release 와 함께 release 되는 것이 아니다.

 

기존 UI system 은 platform 에 종속적이다.

material design 이 처음 나올 때 Android 5 이상에서만 적용 가능했다.

오래된 버전은 support lib 을 사용해야 했다.

하지만 Compose lib 은 Jetpack component 로 들어가면서 platform 에 의존적이지 않게 된다.

 

 

2. All Kotlin API

 

기존에는 xml, Java/Kotlin 등을 이용해서 UI 를 만들고 control 했고, style, animation 등이 xml 형태로 UI 에 녹아들었다.

Kotlin 의 도입으로 xml 대신 선언적인 UI 를 정의하는 것이 가능해졌다.

 

 

3. Composable : 상속이 아닌 composition

 

기존에 custom UI 를 만드는 것은 쉽지 않았다.

View 를 상속해야 했고, 제대로 동작하기 위해서 많은 것들을 care 해야 했다.

TextView 의 경우 30k 라인의 코드를 가지고 있다.

그래서 내부 로직을 신경 많이 써야 한다.

하지만 Composable lib 은 compose 를 사용하기 때문에 이에 대한 고려가 많이 필요가 없어졌다.

 

 

4. 한 방향의 data flow

 

기존의 CheckBox 는 click 되면 checked = true 로 변경된다.

스스로 update 하고 listener 를 통해 이 변화를 notify 해준다.

 

그래서 앱 로직에서는, 예를 들면 ViewModel 에서는, state variable 을 두고 이 변화를 기록해두어야 했다.

이렇게 함으로써 checked state 에 대해서 2개의 복사본이 생긴다. 이는 에러를 양산해내기 쉽다.

ViewModel 의 state var 의 변화가 CheckBox 를 update 해야했고, 이는 무한 루프를 예견하기도 한다.

 

Compose lib 을 통해서라면 이는 쉽게 해결할 수 있다.

차이(변경)는 Compose framework 에 의해 다뤄지고, data model 은 Compose component 에 주입된다.

게다가 compose component 는 스스로 state 를 바꾸지도 않는다. 대신 listener 를 통해 노출만 한다.

state 에 대한 update role 은 app 이 가져간다.

 

 

5. 더 좋은 debugging

 

Kotlin 코드를 사용하도록 되어 있기 때문에, debugger 와 breakpoint 가 잘 작동한다.

 

 

 

* 추가 정보

 

Jatpack Compose 는 open source 이며 2개의 주된 컴포넌트를 가지고 있다.

하나는 Compose UI lib 이다. 

이 녀석은 layout, input, text, animation, style, widget, graphics 등의 내용을 담은 UI toolkit core 이다.

둘째는 Compose compiler 로, custom Kotlin compiler plugin 이며, composable function 을 취해서 자동으로 UI hierarchy 를 update 하는 녀석이다.

composable function 을 만들기 위해서는 function 에 @Composable annotation 을 쓰면 된다.

 

 

 

참고 링크

https://bloggie.io/@_junrong/first-taste-of-android-jetpack-compose

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

번호 제목 글쓴이 날짜 조회 수
128 단말기 고유값 구하는 방법들 황제낙엽 2019.03.03 11739
127 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-04 file 황제낙엽 2018.08.12 1711
126 고유 식별자의 모범 사례 (Android Developers) 황제낙엽 2019.03.03 1106
125 Emulator: audio: Failed to create voice `adc' 황제낙엽 2018.08.06 1007
124 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-06 file 황제낙엽 2018.08.19 991
123 HTTP 프로토콜을 이용한 Json Post 보내고 받기 file 황제낙엽 2017.08.03 816
122 Error:Execution failed for task ':app:lintVitalRelease'. 황제낙엽 2018.01.29 783
121 파일 입출력(내장 메모리, 외장메모리) 황제낙엽 2018.08.19 720
120 HttpURLConnection 에서 세션 유지하기(쿠키 사용) 황제낙엽 2017.08.03 661
119 [성공샘플] HttpURLConnection 을 이용하여 JSON 데이터 보내기 예제 황제낙엽 2018.11.10 649
118 Image to byte Array (바로 사용가능한 JPEG 파일) 황제낙엽 2018.07.24 612
117 STT 학습 링크 모음 (sample link) 황제낙엽 2018.10.11 552
116 ABI 관리 황제낙엽 2017.03.28 535
115 TTS 를 위한 스마트폰 설정 및 TTS 샘플 file 황제낙엽 2019.02.16 460
114 안드로이드 스튜디오(Android Studio) 최적화 file 황제낙엽 2018.02.07 433
113 android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유 황제낙엽 2019.04.26 322
112 동적 레이아웃 생성과 자동 줄바꿈 구현 file 황제낙엽 2018.12.26 311
111 Android - Actionbar에 tab을 추가하고 스와이프 동작으로 화면 전환 구현( ViewPager와 FragmentPagerAdapter 사용) file 황제낙엽 2017.09.11 308
110 안드로이드 두지점(위도,경도) 사이의 거리 file 황제낙엽 2017.01.25 257
109 안드로이드 기기 식별 방법 - UUID(Universally unique identifier) 황제낙엽 2019.03.03 234