본문 바로가기

Android169

[Android] Hilt 딥다이브 Hilt는 프로젝트에서 의존성 주입을 실행하는 상용구를 줄이는 Android용 의존성 주입 라이브러리입니다.Hilt를 들어가기 전 의존성 주입(DI)를 사용하는 이유와 힐트의 기본형인 Dagger에 대해 알아보겠습니다. 의존성 주입이란?특정 객체의 인스턴스가 필요한 경우 이를 직접 생성하지 않고, 외부에서 생성된 객체를 전달하는 기법입니다.각 객체는 다른 객체의 생성에는 관여하지 않고 객체를 필요로 하는 부분과 독립된 별도의 모듈이 객체의 생성과 주입을 전달합니다. 예를들어서 Engine을 사용하는 Car 클래스가 있을경우 Car 클래스는 Engine 클래스에 의존하고 있습니다. 즉 Engine 클래스의 생성자가 변경되거나 파생 클래스가 생긴다면 Car 클래스 또한 수정해야 합니다. 그림으로 본다면 Ca.. 2025. 2. 22.
[Android] 직렬화/역직렬화 라이브러리 (Gson, Moshi, Kotlin-serialization) 직렬화/ 역직렬화Serialization(직렬화)란 자바 시스템 내부에서 사용하는 객체를 외부의 자바 시스템에서도 사용할 수 있도록 byte형태로 데이터를 변환시키는 기술을 말합니다.안드로이드 상에선 직렬화를 이용해 액티비티간 또는 서비스간 클래스 타입의 데이터를 주고 받는 용도로 주로 사용합니다.역직렬화(desrialization)는 그 반대로 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것입니다. JSON 직렬화/역직렬화JSON?JSON은 JavaScript Object Notation의 약자로 Name과 Value로 이루어진 하나의 텍스트 형식입니다.JSON은 언어로부터 독립적이기 때문에 다수의 언어(C, C++, C#, java, java.. 2025. 2. 20.
[Android] Retrofit CallAdapter를 통해 효과적으로 예외 처리하기 이전 포스팅에서는 Retrofit 내부 동작에 대해서 알아보았습니다.내부적으로 CallAdapter를 생성하는 것을 확인할 수 있었는데요. 이를 커스텀해서 Retrofit에 적용할 수도 있습니다. 이번 포스팅에서 CallAdpater를 커스텀하여 적용함으로써 예외를 어떻게 효과적으로 처리할 수 있는지 알아보겠습니다. 다들 경험하셨다시피 앱을 제작할 때 네트워크 통신은 필수적으로 이뤄지는 경우가 많습니다. 프로젝트는 계속해서 늘어만 가고, 그 수에 비례해 증가하는 API, 그리고 비대해지는 Repository, Data Model은 걷잡을 수 없었습니다.. 따라서 관리 포인트 감소, 유지 보수 비용을 줄이는 것이 앱 개발자의 숙명이 아닐까라는 생각이 들었죠.그래서 우리는 무엇을 해야 하나요우리는 산재되어있.. 2025. 2. 20.
[Android] Retrofit 내부적으로 어떻게 동작할까? Retrofit2Retrofit2는 서버와 클라이언트(Android)의 HTTP 통신을 위해 Square사에서 제공하는 네트워크 라이브러리입니다. 기본적으로 Type-Safe한 형태로 지원되며, 내부적으로 OkHttp 클라이언트와 함께 동작합니다. 그동안 어떻게 사용해왔었나우리는 Retrofit2를 사용할 때 반드시 API Interface를 정의했었습니다. 보통 아래와 같은 3가지 방식으로 작성합니다.internal interface ApiService { // 1) @GET("boxoffice/searchDailyBoxOfficeList.json") fun getDailyBoxOffice( @Query("key") apiKey: String = BuildConfig.. 2025. 2. 20.
[Android] StateFlow의 원자성 보장 방법 (feat. update) StateFlow의 값 갱신 방법Flow의 값을 갱신할 때 사용되는 emit, value, update 세 가지 방법은 각각 고유한 특징과 차이점이 있습니다. 이들을 구분하여 이해하면 더 효율적으로 Flow를 활용할 수 있습니다.1. emitemit은 Flow에서 값을 갱신하고 방출하는 가장 기본적인 방법입니다. emit은 suspend 함수로, Flow의 생산자에서 값을 방출할 때 사용됩니다.2. valuevalue는 Flow의 MutableStateFlow와 같은 상태 관리 객체에서 사용하는 프로퍼티입니다. 이 프로퍼티를 통해 값을 동기적으로 변경하고 접근할 수 있습니다.emit과 기능적으로 비슷하지만, value는 코루틴 외부에서도 동기식으로 호출할 수 있다는 차이가 있습니다. 예를 들어, valu.. 2025. 2. 18.
[Android] 이벤트 처리 Channel vs SharedFlow 안드로이드에서 이벤트(사이드 이펙트)는 주로 channel 또는 sharedFlow를 사용해 처리한다.channel을 이용한 이벤트 처리 예시 코드private val _effect: Channel = Channel()val effect = _effect.receiveAsFlow()sharedFlow를 이용한 이벤트 처리 예시 코드private val _sideEffectFlow: MutableSharedFlowval sideEffectFlow: SharedFlow = _sideEffectFlow.asSharedFlow() 그렇다면 SharedFlow와 Channel을 사용한 이벤트 처리의 차이점은 뭘까?각각의 장단점에 대해 알아보자. Channel장단점장점 : 백그라운드에서 발생한 이벤트도 수집 가능단.. 2025. 2. 18.