Kotlin/Android(7)
-
Flow 와 LiveData 차이점?
Android 앱 개발 시에, MVVM 패턴을 통해 서버와 통신을 할 때 이러한 질문을 던질 수 있다. MVVM 패턴이란 Model, View, ViewModel 의 계층을 나누어서 서버와의 데이터 통신을 관리하는 아키텍처 패턴이다. 일반적으로 ViewModel에서는 LiveData를, Model에서는 Flow형을 사용한다. # LiveData View에 데이터의 변경을 알리기 위해 고안된 자료형이다. Observer 패턴으로, 감싸고 있는 값이 변경되면 View에 등록된 함수를 수행한다. map이나 switchMap 함수를 사용하여 여러 리소스를 가진 MediatorLiveData를 가질 수 있다. MutableLiveData 형으로 더욱 편리하게 감싸고 있는 데이터를 변경을 할 수 있다. 일반적으로 ..
2021.11.08 -
OkHttp 와 Retrofit 차이
둘 다 Square 사에서 만든 HTTP 통신을 위한 라이브러리지만, 용도는 다르다. # OkHttp 라이브러리 https://square.github.io/okhttp/ HTTP NW 통신을 하는 동안, 빠르게 텍스트나 미디어 데이터를 전송하도록 하는 라이브러리다. OkHttp는 NW 통신 중에 오류가 발생하였을 때, 빠르게 상태를 회복한다. 이는 서비스 상에서 여러 개의 IP 주소들을 제공하였을 때, 오류가 발생하면 다른 IP 주소로 시도해봄으로써 이루어진다. request와 responce API를 제공하며, 이는 immutable하다. 이는 동시에 여러 blocking call을 수행하며, callback을 통해 비동기 작업을 지원한다. # Retrofit 라이브러리 https://square.g..
2021.11.06 -
Android Studio에서 SHA-1키 얻는 방법
때는 Android Studio와 .gradle 파일을 모두 삭제하고, 다시 Android 앱 프로젝트를 테스트하려던 도중이었다. 앱은 정상적으로 실행이 되지만, 어찌된 일인지 Google Login API 로그인이 진행되지 않았다. # Problem Logcat을 다음과 같은 Error를 확인하였다. com.google.android.gms.common.api.ApiException: 10: # Solution Android Studio 4.2버전 이전에는 오른쪽 탭의 Gradle > Task > android > signingReport 를 통해 SHA-1를 얻을 수 있었다. 하지만 Android Studio를 업데이트하고, 4.2버전 이상부터는 아래와 같이 Task폴더가 보이지 않는다. ## Ste..
2021.10.31 -
MediatorLiveData로 LiveData 병합하기
MediatorLiveData는 LiveData의 하위 클래스로서, 이를 사용하여 여러 개의 LiveData 소스를 병합할 수 있다. 마찬가지로, 이는 관찰자에게 원천 LiveData가 변경될 때마다 호출된다. 주로 DB나 NW의 업데이트를 관찰하기 위해 사용한다. 다음과 같이, addSource(T)를 통해 원천 LiveData를 추가한다. val liveData1: LiveData = ... val liveData2: LiveData = ... val merger = MediatorLiveData() // MediatorLiveData.addSource(LiveData, Observer) merger.addSource(liveData1) { value -> merger.setValue(value) }..
2021.10.27 -
LiveData 변환하기
- LiveData에 저장된 값을 변경하여 저장하고 싶은 경우 - 다른 LiveData 인스턴스를 반환해야 하는 경우 이러한 경우 Lifecycle 패키지에 Transformations 클래스를 사용한다. # Transformations.map() LiveData에 저장된 값에 map으로 함수를 적용한 값을 다운스트림으로 전파한다. val userLiveData: LiveData = UserLiveData() val userName: LiveData = Transformations.map(userLiveData) { user -> "${user.name} ${user.lastName}" } # Transformations.switchMap() LiveData에 저장된 값에 ㅌ으로 함수를 적용한 값을 wr..
2021.10.27 -
LiveData 생성하기
# LiveData 초기화하기 LiveData 초기화하는 방법은 2가지가 있다. 하지만 LiveData는 비동기 데이터 스트림을 처리하도록 설계되지 않았다. 즉 데이터 스트림을 결합하는 기능이 매우 제한적이다. - LiveData로 변환 - MediatorLiveData를 사용 추천하는 방식은 Kotlin Flow를 사용한 후, asLiveData() 메서드를 통해 LiveData로 변환하는 방식이다. Java로 빌드된 코드인 경우, CallBack이나 RxJava와 함께 Executor를 사용하는 것을 추천한다. # ViewModel에서 LiveData 사용하는 방법 LiveData는 List와 같은 데이터의 wrapper에 해당한다. 일반적으로 ViewModel에서는 다음과 같은 형태로 사용한다. c..
2021.10.26