본문 바로가기

Android/Jetpack, Clean Architecture

(13)
[Android] AAC Navigation 사용하기 (이동, 데이터 전송, 애니메이션) 이전에 Navigation의 구성요소, 원칙 등을 살펴봤습니다. 이번에는 Navigation을 사용해 Fragment 간에 이동, 데이터 전송, 애니메이션 등을 구현할 것입니다. 결과 총 5개의 Fragment를 이동할 것이며 이름, 이메일 문자열을 데이터로 전송할 것입니다. 의존성 선언 build.gradle (app or module) dependencies { def nav_version = "2.3.3" // Kotlin Navigation implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" } S..
[Android] AAC Navigation 살펴보기 Navigation은 무엇일까? Navigation Architecture Component(이하 Navigation)는 18년도에 처음 소개된 Android Jetpack Library입니다. Fragments, Activities와 같은 components 간 탐색을 돕기 위한 라이브러리입니다. Android Jetpack의 Navigation 구성 요소는 간단한 버튼 클릭부터 앱 바 및 탐색 창과 같은 더 복잡한 패턴까지 탐색을 구현하는 데 도움이 됩니다. single activity, multiple fragment 구조를 구현하기 쉽게 해 줍니다. Navigation 사용하여 할 수 있는 것들 Fragment 트랜잭션을 관리할 수 있다. Up, Back 버튼의 작업 등(백 스택 관리)을 간단하게..
Android 양방향 데이터 바인딩 사용하기 (Two-way DataBinding With LiveData) 이전에 DataBinding에 LiveData를 사용해 데이터가 변경될 때마다 실시간으로 UI에 반영되도록 했습니다. 이번에는 사용자가 입력한 값을 가져와서 처리할 때 유용한 양방향 데이터 바인딩(Two-way DataBinding)을 사용해보겠습니다. 기존에 사용하는 단방향 데이터 바인딩의 경우 다음과 같이 LiveData가 가진 데이터를 사용자에게 보여줄 때 유용했습니다. android:text="@{String.valueOf(myViewModel.countData)}" 하지만 사용자가 입력한 값을 사용하려면 여전히 EditText에서 Text를 가져오는 과정을 직접 작성을 해야 했습니다. EditText에 사용자가 입력한 값을 LiveData가 가지고 있어서 처리가 필요할 때마다 ViewModel에..
DataBinding에 ViewModel, LiveData와 함께 사용하기 지난 LiveData 사용하기에 이어서 DataBinding을 ViewModel, LiveData와 함께 사용해보려고 합니다. 결과물 버튼을 클릭하면 1을 더한 결과를 보여줍니다. 주요 처리 사항 ViewModel을 Databinding에 사용하기 덧셈 결과(LiveData)가 버튼 클릭으로 인해 변경될 때마다 실시간으로 TextView에 반영이 됩니다. MainActivity.kt에서 덧셈 결과(LiveData)를 관찰하는 코드를 명시 안 해도 됩니다. MainActivity.kt ViewModel을 생성한 이후 binding의 변수로 사용합니다. layout에서 ViewModel이 가지고 있는 LiveData, 함수 등을 사용할 수 있습니다. 또한 LiveData를 DataBinding에서 사용할 때..
[안드로이드/Android] LiveData 사용하기 LiveData은 무엇이고 왜 사용할까? LiveData는 Data의 변경을 관찰할 수 있는 Data Holder 클래스입니다. (LiveData is lifecycle aware observable data holder class) lifecycle aware app components인 activities, fragments, or services 들의 생명 주기를 고려합니다.(lifecycle aware) lifecycle aware를 한 특징으로 인해 active 한 생명 주기를 가진 관찰자만(activities, fragments, or services) 업데이트할 수 있습니다. ** Observer (관찰자)란 LiveData가 가지고 있는 데이터 변화를 관찰하는 대상입니다. 데이터가 변할 때..
[안드로이드/Android] ViewModel 사용하기 안드로이드 os 설정이 바뀌면 activity를 다시 만듭니다. 액티비티 생명주기로는 onDestory 이후 onCreate가 실행됩니다. viewmodel은 이런 경우를 대비해 기존에 UI가 가진 데이터를 가지고 있고 onCreate 할 때 다시 보여줄 수 있습니다.. 설정이 바뀌는 경우는 화면 전환 언어 변경 멀티 윈도우 환경으로 변경 키보드 변경 등등이 있습니다. ViewModel을 사용하지 않았을 경우 겪는 불편함 안드로이드 앱 개발자로서 os 설정 바뀌여서 앱이 다시 시작되는 상황을 고려하고 앱을 만들어야 합니다. 예를 들어 앱이 규모가 큰 앱인 경우 구성이 변경될 때마다 2000천 개의 리스트를 불러오는 비동기 호출을(API 호출) 다시 해야 합니다. 시스템 자원이 불필요하게 사용되고, 사용자..
[안드로이드/Android] Databinding 사용하기 Databinding 사용한 예시를 만들기 전에 findViewByid의 작동 방식을 알아보고 가겠습니다. 목차 findViewByid 작동 방식과 문제점 우리가 뷰에 대한 참조를 얻기 위해서 findViewByid() 함수를 사용할 때마다 안드로이드 시스템은 런타임 중에 뷰 구조를(view hierarchy) 살펴보고 원하는 뷰를 찾아내는 작업을 합니다. 규모가 큰 앱의 경우 레이아웃이 많고 수 백개의 뷰가 있을 수 있습니다. 그럼 한 화면을 보여줄 때 안드로이드 시스템은 수 백번 뷰 구조를 보는 작업이 필요합니다. -> 규모가 큰 앱의 경우 안드로이드 시스템에서 뷰를 참조하기 위한 많은 작업이 필요합니다. 적어도 오늘 날의 모바일 폰 시장에서 적어도 60Hz의 화면 재생 빈도(refresh frequ..
모던 안드로이드 앱 만들기 (3) - Retrofit, RxJava를 이용한 네트워크 통신 Retrofit2, RxJava RxJava는 asynchronous event based communications (비동기 이벤트 기반 통신)을 위한 라이브러리입니다. 기존 Retrofit 사용 시에는 주로 Call 인터페이스의 enqueue 메서드를 통해서 비동기적으로 API와 통신을 하고 이후에 onFailure와 onResponse로 통신 결과를 전달받습니다. 이번엔 Call 인터페이스 대신 비동기 태스크 처리를 위해 RxJava, 네트워크 통신을 위해 Retrofit을 사용할 것입니다. retrofit2:adapter-rxjava2를 이용하면 기존의 RxJava를 사용하던 타입을 적용해 Retrofit을 통해서 API 호출과 결괏값을 처리할 수 있습니다. RxJava adapter를 추가하여 ..