UI의 진화 - Material design 3(Material You) 2021년 공개하고 2022년에 1.0 버전이 출시된 Material You. 3번째 Material design이다. Material Compose는 바텀 시트 관련은 아직 알파 버전에서 제공하고 있다. UI 요소는 기존 보다 더 넓은 여백을 볼 수 있으며, Large screen 대응이 되어있다. 좀 더 쉽게 Large screen을 대응하려면(폴드와 같은) 3를 선택하면 좋다.
• 개발 SDK에서는 디저트 이름 확인 가능(Tiramisu부터 다시) • 최근 안드로이드는 보안 업데이트 위주 ◦ 권한의 강화 및 보완 ▪ 일정 기간 사용하지 않는 권한 회수 ▪ 파일에 대한 접근성 개선(사용자 입장에선 좋은) ◦ 백그라운드 강화 ▪ 백그라운드 시간 등으로 제한(안드로이드 14에서 더욱 강화) 정리 9 이후 버전부터 디저트 이름 대신 Q, R, S를 사용하다가 13부터 개발 중인 SDK에서라도 디저트 이름을 보여주고 있다. 최근엔 보안 이슈 위주 업데이트가 많은데, 이는 Play store의 정책과도 연결점이 있으니 잘 확인해야 한다. 안드로이드 14부터는 백그라운드 서비스 사용 시 서비스 타입을 적용해야 하며, 그 외에는 시간제한이 포함되었다.
◦ READ_MEDIA_VIDEO ◦ READ_MEDIA_VISUAL_USER_SELECTED 권한 - Media 안드로이드 14에서 미디어 권한이 또 한 번 개선되었는데, iOS와 동일한 사용자 선택 옵션을 추가로 제공한다. 안드로이드 미디어 권한은 버전별 차이가 크다 보니 다음 링크와 같은 긴 코드를 작성해 처리할 수 있다. https://github.com/Drjacky/ImagePicker/blob/master/imagepicker/src/main/kotlin/com/github/drjacky/imagepick er/provider/GalleryProvider.kt
API 19 이상에서 활용 가능 • 버전별 보이는 화면이 다름 • 이미지 한 장 또는 멀티, gif, 동영상을 선택할 수 있음 ◦ 항상 새로운 미디어만 고를 수 있음 • 권한이 필요 없어 단순 미디어 선택 시에는 가장 좋은 선택 Media 권한 대신 - Photo picker 사용 Photo Picker는 androidx.activity 1.7.0 버전 API Level 19 이상에서 활용할 수 있으며, 이미지 한 장 또는 여러 장, gif, 동영상 등을 선택할 수 있지만 항상 새로운 미디어만 고를 수 있기에 커스텀 요구사항이 있는 경우엔 적합하진 않다.
UI 쓰레드에서도 동작 Eclipse Android Tools 현재는 거의 사용하지 않는 이클립스도 그때는 매우 좋은 도구였다. Java 1.6을 기반하고, xml로 UI를 작성하던 시절이다. Android 2.x 버전까지만 해도 비동기 동작도 UI 쓰레드에서 할 수 있었다.(ANR이 안 걸리던…)
UI 쓰레드에서도 동작 • Android 4.4 버전과 함께 소개 • Gradle 사용 • Java 1.7 지원(4.4부터) • RecyclerView 사용 • Support library 사용 시절 Eclipse Android Studio 1.0 Android Tools 지금까지 가장 잘 활용하는 Android Studio 1.0 버전이 2013년 공개되었는데, 이클립스에서 AS로 변환하는 과정을 거쳐야 Android Studio 사용이 가능했다.
UI 쓰레드에서도 동작 • Android 4.4 버전과 함께 소개 • Gradle 사용 • Java 1.7 지원(4.4부터) • RecyclerView 사용 • Support library 사용 시절 Eclipse Android Studio 1.0 • Support library 세분화 > androidx 공통화 • kotlin 지원 • Kotlin 기반 Compose 소개 AS 첫 소개 이후 Android Tools
architecture ◦ ETC • android.arch를 통해 첫 배포 • Configuration change에서 데이터 유지를 위해 사용 • Blueprints에 MVVM 패턴 추가 • Google Sunflower 샘플 Blueprints AAC-ViewModel Android development guide AAC-ViewModel이 처음 공개되었는데, 이 AAC-ViewModel을 지금까지 사용하는 것이다. 처음 공개에서는 configuration change에서 데이터 유지를 위해 사용하는 것이었으나, Compose까지 나온 지금은 MVVM에서 말하는 ViewModel처럼 사용하도록 가이드 되어있다.(안드로이드 추천 가이드 참고)
architecture ◦ ETC • android.arch를 통해 첫 배포 • Configuration change에서 데이터 유지를 위해 사용 • Blueprints에 MVVM 패턴 추가 • Google Sunflower 샘플 Blueprints AAC-ViewModel • Blueprints에 compose 관련 코드 업데이트 • Now In Android를 통해 UiState를 활용한 샘플 제공 Compose Android development guide Compose가 나온 이후 기존 코드 Sunflower 역시 Compose로 변환되어 있으니 참고하면 좋다.
Data Layer를 필수로 사용하는 형태이다. 하지만 Domain Layer의 UseCase는 구글 샘플에서도 확인할 수 있는데, 단순 포워딩하는 UseCase의 형태가 아니라 2개의 Data Layer의 Repository를 합쳐 사용해야 유용하다. 단순 포워딩이 주는 이점이라면 명칭의 명확성? 그런데 Repository에 함수명을 잘 적어도 동일하지 않을까?
잘 활용하여 설계 SingleActivity? Android Architecture Navigation을 활용한 SingleActivity를 추천한다. 그런데 설계할 부분이 분명 존재한다. 화면 별로 데이터를 다시 부르거나, 데이터가 변경되면 어디까지 영향을 미칠 것인가? 데이터 보안이 필요한 경우는 어떻게 할 것인가? 등 고민할 부분은 여전히 존재한다. 그래서 쉽게 선택할 수 있는 것은 아니다.
잘 활용하여 설계 • UDF(단방향 데이터 흐름) 원칙을 따르도록 Observable 패턴 활용 • AAC-ViewModel에서 비즈니스 로직을 처리하고, UI 상태를 UI에 노출 • 안드로이드 생명주기를 사용할 수 있도록 ◦ repeatOnLifecycle, collectAsStateWithLifecycle 사용 • ViewModel에서 이벤트를 처리하고, UI에 전달(UiState) SingleActivity? AAC-ViewModel Android Architecture 구글의 추천은 UDF(단방향 데이터 흐름) 원칙을 따르라고 한다. 문서에 나와있지만 AAC-ViewModel을 사용해 비즈니스 로직을 처리하고, UI 상태를 갱신하도록 하라는 것이다. 앞에서 AAC-ViewModel 이야기를 하면서 한 이야기인데 공식 문서와 추천 가이드의 문서 내용이 다른 부분이 이 부분이다. 결국 MVVM에서 말하는 ViewModel과 동일하게 사용하라는 의미이니(이미 많이 그렇게 사용한다)
잘 활용하여 설계 • UDF(단방향 데이터 흐름) 원칙을 따르도록 Observable 패턴 활용 • AAC-ViewModel에서 비즈니스 로직을 처리하고, UI 상태를 UI에 노출 • 안드로이드 생명주기를 사용할 수 있도록 ◦ repeatOnLifecycle, collectAsStateWithLifecycle 사용 • ViewModel에서 이벤트를 처리하고, UI에 전달(UiState) SingleActivity? AAC-ViewModel • Jetpack Compose를 사용하여 화면을 그린다. • Compose를 사용한다고 ViewModel을 사용하지 않을 이유는 없다. Compose Android Architecture 앞으로의 UI는 컴포즈 기반이 많아지는 건 당연하다. xml 관련한 추가적인 보완이 어디까지 할진 모르지만 일부는 이미 추가 수정하지 않는 부분도 있다고 하니 참고하길(DataBinding)
있다. Compose를 사용하면 일부는 MVI를 사용해야 한다고 하지만, 우린 이미 그 형태를 따르고 있다. 구글 샘플 코드에서조차 MVVM에 UiState를 사용하고, UDF를 적용하고 있다. MVI에서 설명하는 그런 흐름은 이미 MVVM에서 다 하고 있다. 그럼 다음은 뭘까? 3개의 키워드를 뽑아보면 상태 관리, 액션, Reducer. 웹 개발자는 익숙한 리액트 개념이 포함된 것이다. 이미 이런 흐름의 아키텍처도 있고, 샘플도 존재한다.
오래전부터 MVVM 관련 참고 자료 활용 왼쪽은 안드로이드 샘플 중 하나인 tivi는 Chrisbanes 개인 프로젝트로 Reducer를 사용하고 있다. Android Compose 기반이며 UiState가 적용되어 있다. 그리고 iOS에서 유명한 TCA(The Composable Architecture)가 있다. 이것만 보아도 MVVM만 가지고 UI를 그리는 지금과는 조금 더 확장되는 반응형 Ui를 표현할 수 있다. tivi의 경우 멀티 플랫폼 형태인 KMP 샘플이다.
◦ iOS(Alpha) ◦ desktop ◦ web(Experimental) Next 이런 리액트 개념만 잘 적립해두면, 안드로이드 플랫폼을 벗어나 Kotlin Multiplatform을 해볼 수 있는 것이다. 이중 아직은 멀어 보이는 Compose Multiplatform이다.