Search
Duplicate
🛥️

Android 기술 면접 확인하세요. livedata, rxjava, context, postvalue, setvalue, minsdk, targetsdk

간단소개
다른 곳에서 정리하지 않은 내용들을 추가해봤습니다.
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Android
RxJava
Kotlin
livedata
proguard
Scrap
태그
면접준비
android
kotlin
9 more properties

LiveData와 RxJava 차이

공통점

옵저버 패턴을 사용해 반응형 프로그래밍을 할 수 있도록 도와주는 라이브러리들이다.
데이터의 변화를 감지하고 미리 작성해둔 코드를 통해 UI 변경, 비즈니스 로직 등을 실행함.

차이점

LiveData

MVVM-ViewModel에서 단순, 관찰 가능한 데이터 홀더 클래스
view의 lifecycle을 인식하고 그에 맞춰
구독/해지 함.
파라미터로 받는 lifeCyclerOwner의 생명주기를 인식하여, started나 resumed상태가 되어야만 observable한 상태로 변환되어 데이터 변화를 감지하고, destroyed 이후로는 참조 상태를 자동으로 해지함. ⇒ 메모리 누수 없음
DataBinding을 통해 xml파일에서 직접 등록하여 사용할 수 있음.
즉 UI와의 연결성이 좋고, 낮은 러닝커브를 가지고 있음.

RxJava

리애깉브 프로그래밍을 위한 API
LiveData는 observe 코드 내부에서 코루틴이나 쓰레드를 변경하여 작성하지만, RxJava는 subscriveOn이나 observeOn을 통해 어떤 쓰레드에서 실행할 지 결정할 수 있음.
여러 로직 처리를 간편하고 읽기 쉽게 작성할 수 있도록 도와줌.

두 개를 적절히 잘 쓰는 법

1.
비즈니스 로직(네트워크 호출, 데이터 조작 등)은 RxJava를 사용하고, 프레젠테이션 계층에서 LiveData를 사용하는 것.
2.
만약 Coroutine Flow의 경우 비동기 데이터 스트림 처리에 최적화된 데이터 홀더 클래스이며, 이를 추가로 활용할 수 있음.
3.
채팅에서는 LiveData를 사용하기 힘듦. 현재 상태의 Data만 가지고 있기 때문.

LiveData; postValue() vs setValue()

LiveData는 옵저버 패턴을 따르며, 데이터의 변경이 일어날 때마다 콜백을 받아 원하는 동작을 실행할 수 있다.
데이터를 변경하게 해주는 함수로 setValue, postValue가 있다.

setValue

메인 쓰레드에서 바로 값을 변경해준다.
setValue함수를 호출한 후, 바로 밑에서 getValue를 호출하면 변경된 값을 가져올 수 있다.

postValue

백그라운드에서 값을 변경한다.
내부적으로는 메인lopper로 보내 메인스레드에서 값을 변경한다.
postValue가 여러번 호출된다면 모든 값이 적용되는 것이 아니라 가장 최신의 값이 적용된다. 따라서 postValue를 호출한 후 바로 getValue를 한다면 변경된 값을 읽어오지 못할 수 있다.
옵저버가 없는 필드에서 postValue를 호출하고 getvalue를 호출한다면, poseValue로 변경한 값을 얻어올 수 없다.

Android Application Context

context

현재 사용하고 있는 어플리케이션/액티비티 에 대한 포괄적인 정보를 지닌 객체.
어플리케이션에서 현재 실행되고 있는 환경을 가지고 있음.

안드로이드 어플리케이션 콘텍트스란?

액티비티, 서비스, Broadcast receiver, content provider, intent에 접근 가능한 기본 클래스.
앱 프로세스 생성 시, 가장 먼저 초기화.
앱 전역에서 일관성있게 사용하는 요소를 등록함.
Application lifecycle을 따름
현재 컨텍스트와 상관없는 다른 컨텍스트가 필요하거나 액티비티 활동범위를 벗어난 컨텍스트 필요 시 사용

액티비티 콘텍스트

activity lifecycle을 따름.

SDK

minSdk

앱이 실행되는 최소한의 API 레벨
디바이스 버전이 이 버전보다 낮다면 인스톨되지 않음.

targetSdk

선언되어있지 않다면 minSdkVersion과 동일한 값으로 간주
앱 개발 시 테스트되어진 API레벨
해당 버전보다 높은 버전의 디바이스에서 실행 시, 안드로이드 플랫폼에서는 하위 호환성 관련 기능을 활성화시키고 앱을 실행.