
사진: Unsplash의henry perks 개인 프로젝트를 진행하면서 사용자에 위치에 근처에 있는 관광지를 추천해 주는 기능을 추가하면 어떨까? 하고 생각했습니다. 이번 게시글에서는 안드로이드에서 사용자의 위치를 가져올 수 있는 방법을 다뤄보고자 합니다. 다만 해당 게시글에서는 방법을 알려주는 것에 그치기에 생략된 부분이 많습니다. 그렇기 때문에 어느 정도 구조와 사용되는 라이브러리에 대해 이해하지 않으면 어려우실 수 있습니다. Set up 가장 최근에 알려진 사용자의 위치 정보를 가져오기 위해서는 `Google Play services location APIs` 를 사용합니다. 이와 관련된 내용은 아래의 공식문서에 있습니다. 마지막으로 알려진 위치 가져오기 | Sensors and location |..

사진: Unsplash의Alina Grubnyak 안드로이드 개발을 하다 보면 HTTP 요청을 해야 하는 경우가 있습니다. HTTP 요청을 처리할 수 있는 가장 흔하게 사용되는 라이브러리로는 Retrofit2이 있습니다. Retrofit2은 클라이언트와 서버사이에 비동기적인 네트워크 요청 처리를 해주는 라이브러리입니다. 인터페이스에 어노테이션을 사용해서 생각보다 간편하게 구현할 수 있습니다. 다만, Retrofit2은 기본적으로 자바 라이브러리입니다. 현재 안드로이드에서 사용하는 라이브러리들은 코틀린 멀티 플랫폼을 위해 코틀린만으로 구성된 라이브러리로 만들어지고 있는 추세입니다. 그렇기에 Retrofit2를 계속해서 사용하는 것에도 제한 사항이 발생하였습니다. 이러한 제한 사항을 해결하기 위해 코틀린만으..

사진: Unsplash의Arisa Chattasa 안드로이드 개발을 하면서 서버에서 데이터를 받아와야 하는 경우가 상당히 많이 발생합니다. 이때 서버에서 보내주는 데이터의 형식은 대부분 JSON 데이터 형식으로 보내집니다. 이러한 JSON 데이터로 변환하기 위해서는 직렬화(Serialization) 과정을 거쳐야 하고, JSON 데이터를 받아서 원하는 데이터 구조로 변환하려면 역직렬화(Deserialization) 과정을 가져야 합니다. 이번 게시글에서는 안드로이드에서 이러한 JSON 데이터를 다룰 수 있게 해주는 다양한 라이브러리를 살펴보고자 합니다. Json 먼저 Json이 어떻게 되어있는지 한번 살펴보겠습니다. Json 응답은 대괄호로 표시된 배열입니다. Json 객체는 중괄호로 묶여 있고, 각 J..

사진: Unsplash의Fikri Rasyid 이번 게시글에서는 Datastore에 대해 공부한 다음 이전에 만들어놨던 멀티 모듈 로그인 앱에 사용해서 자동 로그인 기능을 구현해보려고 합니다. 시작하기에 앞서 이 게시글에서는 Datastore에 대한 이론적인 내용을 다루고 있지는 않습니다. 아래의 게시글에서 이를 공부한 내용이 있으니, Datastore에 대해 잘 알지 못하신다면 참고하고 오시면 좋을 것 같습니다. [AAC] DataStore with SharedPreferences 이 게시글은 아래의 공식 문서를 보고 작성했습니다. 앱 아키텍처: 데이터 영역 - Datastore - Android 개발자 | Android Developers 데이터 영역 라이브러리에 관한 이 앱 아키텍처 가이드를 통해 ..

사진: Unsplash의Sangga Rima Roman Selia 이 게시글은 저의 무지함으로 발생한 질문에서 시작된 게시글입니다. Now In Android를 참고하여 프로젝트를 진행하던 도중 "Data 모듈에서 Domain의 Usecase에 Repository를 주입할 때에는 @Provide를 사용해서 이를 주입해 주는데, Feature 모듈에서 Usecase를 주입 받을 때에는 왜 @Provide를 하지 않아도 주입받을 수 있는가?" 라는 질문이 생겼습니다. 이 게시글에서 이 질문에 대한 답을 하고자 합니다. 질문에 대한 답 위의 질문은 사실 Dagger를 잘 이해하지 못하고 Hilt를 사용해서 생긴 질문입니다. @Provide와 @Inject은 컴포넌트에서 의존성 그래프를 만들기 위한 과정입니다...

사진: Unsplash의Hardik Pandya 최근에 프로젝트를 진행하면서 ViewModel에서 당연하다는 듯이 SharedFlow나 StateFlow를 사용해야 할 일이 많았습니다.private val _errorFlow = MutableSharedFlow()val errorFlow: SharedFlow get() = _errorFlowprivate val _uiState = MutableStateFlow(UiState.Loading)val uiState: StateFlow get() = _uiState 이렇게 아무 생각 없이 사용하다 보니, 왜 이렇게 2개로 나눠서 관리해야 하지? 라는 원초적인 질문이 생겼습니다. 그래서 이번 게시글에서는 이를 이해하기 위한 Field와 Property ..

사진: Unsplash의Gregory Pappas 안드로이드는 Doze와 App Standby 이 2가지의 절전 기능을 통해, 장치가 전원과 연결되어 있지 않게 하는 방법을 제공하고 있습니다. Doze는 백그라운드 CPU 및 네트워크 활동을 지연시켜 배터리 소모를 줄입니다. App Standby는 최근에 사용하지 않은 앱의 백그라운드 네트워크 활동을 지연시킵니다. 안드로이드의 앱을 개발하다 보면, 이 2가지의 모드에서 동작해야 하거나, 동작할 필요가 없을 때에 동작하지 않게 하는 등의 설계를 해야할 때가 있습니다. 그래서 이 2가지의 절전 기능을 알아보고 공부해보고자 합니다. Doze 모드 핸드폰을 사용하지 않아서 가만히 냅두거나, 전원 버튼을 누르면 핸드폰은 Doze 모드가 됩니다. Doze 모드에서는..

사진: Unsplash의Elisa Photography 현재 프로젝트를 진행하면서 함수 참조를 사용해야 할까??라는 궁금증이 생겼습니다. 리플렉션은 최대한 사용을 지양해야 한다는 생각을 가지고 있었는데, 참고하고 있는 다른 Github에서 함수를 함수 참조로 사용하는 것을 보고, 내가 가지고 있던 생각이 잘못되었고 생각했습니다. 그래서 이번 게시글에서 코틀린의 리플렉션에 대해 자세히 알아보고, 함수 참조와 무엇이 다른가에 대해 알아보려고 합니다. 참고: 이 게시글에서는 각각에 대한 사용법을 다루고 있지는 않습니다. 리플렉션(Reflection)이란? 리플렉션은 프로그램이 런타임에서 자체 소스 코드를 내부 검사해, 클래스의 정보를 조작할 수 있도록 하는 기능입니다. 리플렉션에 대해 이해하기 위해서는 JVM..