$30 off During Our Annual Pro Sale. View Details »

안드로이드의 변화 - IO Extended 2023 - 송도

TaeHwan
August 26, 2023

안드로이드의 변화 - IO Extended 2023 - 송도

TaeHwan

August 26, 2023
Tweet

More Decks by TaeHwan

Other Decks in Programming

Transcript

  1. 머트리얼로 보는 안드로이드 변화? 주요 변화 Old and new? Android

    14 오늘은? Android 개발 방법의 발전? 안드로이드 개발
  2. 4 • 안드로이드 5.0 이전 UI의 진화 안드로이드 5.0 이전인

    4.4 버전의 UI였던 Holo ui의 모습을 볼 수 있다. 여기까지는 개발자들이 사용하는 폰의 느낌이 강하긴 하다.
  3. 5 • 안드로이드 5.0에서 Material design 첫 공개(2014년) UI의 진화

    안드로이드 5.0과 함께 공개한 Material design 1.0 버전이다. 기존과 다르게 디자인 가이드용 사이트도 개선하고, 디자이너가 없이 간단한 UI를 구성할 수 있을 정도가 되었다.
  4. 6 • 안드로이드 9(Pie)에서 Material design 2 공개(2018 업데이트) UI의

    진화 - Material design 2 Material design은 한 번 더 개선되었는데 안드로이드 9인 파이 OS와 함께 2를 공개하였다. 현재까지 가장 많이 사용되는 UI의 모습이다.(갤럭시 제외)
  5. 7 • 안드로이드 12에서 Material design 3(Material You) 공개(2021 업데이트)

    UI의 진화 - Material design 3(Material You) 2021년 공개하고 2022년에 1.0 버전이 출시된 Material You. 3번째 Material design이다. Material Compose는 바텀 시트 관련은 아직 알파 버전에서 제공하고 있다. UI 요소는 기존 보다 더 넓은 여백을 볼 수 있으며, Large screen 대응이 되어있다. 좀 더 쉽게 Large screen을 대응하려면(폴드와 같은) 3를 선택하면 좋다.
  6. 8 • 9 이후 버전 10부터 디저트 이름을 사용하지 않음(대외적)

    • 개발 SDK에서는 디저트 이름 확인 가능(Tiramisu부터 다시) • 최근 안드로이드는 보안 업데이트 위주 ◦ 권한의 강화 및 보완 ▪ 일정 기간 사용하지 않는 권한 회수 ▪ 파일에 대한 접근성 개선(사용자 입장에선 좋은) ◦ 백그라운드 강화 ▪ 백그라운드 시간 등으로 제한(안드로이드 14에서 더욱 강화) 정리 9 이후 버전부터 디저트 이름 대신 Q, R, S를 사용하다가 13부터 개발 중인 SDK에서라도 디저트 이름을 보여주고 있다. 최근엔 보안 이슈 위주 업데이트가 많은데, 이는 Play store의 정책과도 연결점이 있으니 잘 확인해야 한다. 안드로이드 14부터는 백그라운드 서비스 사용 시 서비스 타입을 적용해야 하며, 그 외에는 시간제한이 포함되었다.
  7. 보안 관련 보안 관련 업데이트는 사용자 중심의 업데이트가 주를 이루는데,

    카메라/마이크 사용에 대한 표기, 위치정보 사용한 앱의 흔적, 위치 정보의 범위 선택 가능, 사용하지 않는 앱에 대한 권한 및 앱 삭제, 카메라 마이크에 대한 권한 옵션 제거 등 사용자 입장에서 보안적 개선되었다.
  8. 12 • Photo Picker를 활용하거나, 다음 권한 활용 ◦ READ_MEDIA_IMAGES

    ◦ 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
  9. 13 Media 권한 대신 - Photo picker 사용 안드로이드 8.x

    안드로이드 13 권한이 없이 사용할 수 있는 Photo Picker를 기본으로 제공하지만, 안드로이드 버전별 UI가 다르니 참고
  10. 14 안드로이드 8.x 안드로이드 13 • androidx.activity 1.7.0 이상에서 제공,

    API 19 이상에서 활용 가능 • 버전별 보이는 화면이 다름 • 이미지 한 장 또는 멀티, gif, 동영상을 선택할 수 있음 ◦ 항상 새로운 미디어만 고를 수 있음 • 권한이 필요 없어 단순 미디어 선택 시에는 가장 좋은 선택 Media 권한 대신 - Photo picker 사용 Photo Picker는 androidx.activity 1.7.0 버전 API Level 19 이상에서 활용할 수 있으며, 이미지 한 장 또는 여러 장, gif, 동영상 등을 선택할 수 있지만 항상 새로운 미디어만 고를 수 있기에 커스텀 요구사항이 있는 경우엔 적합하진 않다.
  11. Foreground services Android 14 타겟팅 - 포그라운드 서비스 유형 •

    Camera • connectedDevices • dataSync • Health • location(네비게이션) • mediaPlayback • mediaProjection • Microphone • phoneCall • remoteMessaging • shortService • specialUse • systemExempted Foreground service types are required | Android Developers 포그라운드 서비스의 유형을 지정해 줘야 하는데, 타겟 34인 경우 강제이며 이 부분은 구글 스토어 정책과도 연결되니 필수 사항이다.
  12. • Java 1.6, xml로 개발 • Android 2.x에선 비동기 동작이

    UI 쓰레드에서도 동작 Eclipse Android Tools 현재는 거의 사용하지 않는 이클립스도 그때는 매우 좋은 도구였다. Java 1.6을 기반하고, xml로 UI를 작성하던 시절이다. Android 2.x 버전까지만 해도 비동기 동작도 UI 쓰레드에서 할 수 있었다.(ANR이 안 걸리던…)
  13. • Java 1.6, xml로 개발 • Android 2.x에선 비동기 동작이

    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 사용이 가능했다.
  14. • Java 1.6, xml로 개발 • Android 2.x에선 비동기 동작이

    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
  15. Android Studio Android Tools 왼쪽부터 최근 공개한 nightly(거의 매일 배포

    중이다), Preview(Canary), 마지막 정식 버전의 아이콘이다.
  16. • Blueprints를 통해 MVP 패턴 가이드 ◦ Dagger ◦ Clean

    architecture ◦ ETC Blueprints Android development guide 개발 가이드도 제공해 줬는데 Blueprints를 2016년쯤 제공해 주었는데, 현재는 Android architecture 샘플로 변화되었다. https://github.com/android/architecture-samples
  17. • Blueprints를 통해 MVP 패턴 가이드 ◦ Dagger ◦ Clean

    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처럼 사용하도록 가이드 되어있다.(안드로이드 추천 가이드 참고)
  18. • Blueprints를 통해 MVP 패턴 가이드 ◦ Dagger ◦ Clean

    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로 변환되어 있으니 참고하면 좋다.
  19. 지금의 샘플들 Android development guide • Git Android(https://github.com/android) ◦ Now

    in android(https://github.com/android/nowinandroid) ◦ Android Architecture Samples(https://github.com/android/architecture-samples) ◦ Android Sunflower with Compose(https://github.com/android/sunflower)
  20. Android Architecture 구글에서 추천하는 Architecture이다. Layer 단위로 나누고, UI Layer와

    Data Layer를 필수로 사용하는 형태이다. 하지만 Domain Layer의 UseCase는 구글 샘플에서도 확인할 수 있는데, 단순 포워딩하는 UseCase의 형태가 아니라 2개의 Data Layer의 Repository를 합쳐 사용해야 유용하다. 단순 포워딩이 주는 이점이라면 명칭의 명확성? 그런데 Repository에 함수명을 잘 적어도 동일하지 않을까?
  21. • 권장은 하지만 설계 중요 ◦ Compose, layer architecture, Navigation을

    잘 활용하여 설계 SingleActivity? Android Architecture Navigation을 활용한 SingleActivity를 추천한다. 그런데 설계할 부분이 분명 존재한다. 화면 별로 데이터를 다시 부르거나, 데이터가 변경되면 어디까지 영향을 미칠 것인가? 데이터 보안이 필요한 경우는 어떻게 할 것인가? 등 고민할 부분은 여전히 존재한다. 그래서 쉽게 선택할 수 있는 것은 아니다.
  22. • 권장은 하지만 설계 중요 ◦ Compose, layer architecture, Navigation을

    잘 활용하여 설계 • UDF(단방향 데이터 흐름) 원칙을 따르도록 Observable 패턴 활용 • AAC-ViewModel에서 비즈니스 로직을 처리하고, UI 상태를 UI에 노출 • 안드로이드 생명주기를 사용할 수 있도록 ◦ repeatOnLifecycle, collectAsStateWithLifecycle 사용 • ViewModel에서 이벤트를 처리하고, UI에 전달(UiState) SingleActivity? AAC-ViewModel Android Architecture 구글의 추천은 UDF(단방향 데이터 흐름) 원칙을 따르라고 한다. 문서에 나와있지만 AAC-ViewModel을 사용해 비즈니스 로직을 처리하고, UI 상태를 갱신하도록 하라는 것이다. 앞에서 AAC-ViewModel 이야기를 하면서 한 이야기인데 공식 문서와 추천 가이드의 문서 내용이 다른 부분이 이 부분이다. 결국 MVVM에서 말하는 ViewModel과 동일하게 사용하라는 의미이니(이미 많이 그렇게 사용한다)
  23. • 권장은 하지만 설계 중요 ◦ Compose, layer architecture, Navigation을

    잘 활용하여 설계 • UDF(단방향 데이터 흐름) 원칙을 따르도록 Observable 패턴 활용 • AAC-ViewModel에서 비즈니스 로직을 처리하고, UI 상태를 UI에 노출 • 안드로이드 생명주기를 사용할 수 있도록 ◦ repeatOnLifecycle, collectAsStateWithLifecycle 사용 • ViewModel에서 이벤트를 처리하고, UI에 전달(UiState) SingleActivity? AAC-ViewModel • Jetpack Compose를 사용하여 화면을 그린다. • Compose를 사용한다고 ViewModel을 사용하지 않을 이유는 없다. Compose Android Architecture 앞으로의 UI는 컴포즈 기반이 많아지는 건 당연하다. xml 관련한 추가적인 보완이 어디까지 할진 모르지만 일부는 이미 추가 수정하지 않는 부분도 있다고 하니 참고하길(DataBinding)
  24. Next? State Action Reducer 싱글 액티비티와 Compose, MVVM을 가지고 설계하고

    있다. Compose를 사용하면 일부는 MVI를 사용해야 한다고 하지만, 우린 이미 그 형태를 따르고 있다. 구글 샘플 코드에서조차 MVVM에 UiState를 사용하고, UDF를 적용하고 있다. MVI에서 설명하는 그런 흐름은 이미 MVVM에서 다 하고 있다. 그럼 다음은 뭘까? 3개의 키워드를 뽑아보면 상태 관리, 액션, Reducer. 웹 개발자는 익숙한 리액트 개념이 포함된 것이다. 이미 이런 흐름의 아키텍처도 있고, 샘플도 존재한다.
  25. Composable Architecture Next • tivi(https://github.com/chrisbanes/tivi) ◦ Chrisbanes 주도하는 프로젝트 ◦

    오래전부터 MVVM 관련 참고 자료 활용 왼쪽은 안드로이드 샘플 중 하나인 tivi는 Chrisbanes 개인 프로젝트로 Reducer를 사용하고 있다. Android Compose 기반이며 UiState가 적용되어 있다. 그리고 iOS에서 유명한 TCA(The Composable Architecture)가 있다. 이것만 보아도 MVVM만 가지고 UI를 그리는 지금과는 조금 더 확장되는 반응형 Ui를 표현할 수 있다. tivi의 경우 멀티 플랫폼 형태인 KMP 샘플이다.
  26. Compose Multiplatform • Develop stunning shared UIs for ◦ Android

    ◦ iOS(Alpha) ◦ desktop ◦ web(Experimental) Next 이런 리액트 개념만 잘 적립해두면, 안드로이드 플랫폼을 벗어나 Kotlin Multiplatform을 해볼 수 있는 것이다. 이중 아직은 멀어 보이는 Compose Multiplatform이다.
  27. Thank You TaeHwan kwon 레몬트리 / 안드로이드 개발 머트리얼을 바탕으로

    안드로이드 UI가 쓸 만해졌고, 개발도구와 코틀린, 컴포즈까지 이어지는 과거와 현재까지 살펴보았다. MVVM 기반으로 코드를 작성하는 지금 뭔가 새로운 게 필요하고, 그렇다면 다음엔 어떤 형태의 아키텍처가 가능할까를 짧게 정리해 보았다.