서론 프로그래밍에서 한 번쯤은 접해봤을 DTO, DAO, Entity에 대한 개념을 정리해보려 한다. 클린 아키텍처 적용 시 헷갈리면 안 되는 개념이기 때문에 중요하다고 생각하는 개념이다. DTO(Data Transfer Object) DTO는 단어 그대로 데이터 전송 객체를 의미한다. API 호출 시 response 받는 데이터이다. 계층 간의 데이터 교환을 하기 위해 사용하는 객체 API 호출 시 서버로부터 받은 JSON 형태의 데이터를 매핑할 수 있는 data class 클린 아키텍처의 data 모듈에 model 클래스에 해당 화면에 노출시키지 않는 data가 포함된다면 domain 모듈의 model에 필요한 data만 mapping 하는 작업이 필요함 smaple api : https://json..
Android

서론 최근 회사 앱 업데이트 시 발생했던 경고 메시지 처리에 대해 정리해보려 한다. 앱 업데이트마다 신경 쓰였는데, 당장 수정해야 할 내용은 아니었어서 미뤄두다가 생각난 김에 수정하기로 했다. 경고 메시지 내용은 아래와 같다. 정부앱 선언을 완료하지 않았습니다. 에러 처리 콘솔의 좌측 하단에 앱 콘텐츠라는 카테고리가 있을 것이다. 구글 콘솔 > 대상 앱 > 정책 및 프로그램의 앱 콘텐츠 정부앱 선언의 경우 구글에서는 다음과 같이 설명하고 있다. 유형에 상관없이 정부 기관에서 사용하는 용도의 앱인지 알려주세요. 여기에는 국가, 주, 시 정부, 지역 당국이 포함됩니다. Google에서 적합한 팀이 제출하신 항목을 검토하는 데 도움이 됩니다. 정부 앱인 경우 예, 아닌 경우 아니요를 선택하면 되는데, 정부앱이..

Hilt란? Hilt는 프로젝트에서 종속성 주입을 보다 간편하게 할 수 있도록 도와주는 Android용 종속성 주입 라이브러리다. 수동 종속성 주입을 수행하려면 모든 클래스와 해당 종속성을 직접 구성하고 컨테이너를 사용하여 종속성을 재사용하고 관리해야 한다. Hilt는 프로젝트의 모든 Android 클래스에 대한 컨테이너를 제공하고 수명 주기를 자동으로 관리함으로써 애플리케이션에서 DI를 사용하는 표준 방법을 제공한다. Hilt는 Dagger가 제공하는 컴파일 시간 정확성, 런타임 성능, 확장성 및 Dagger 라이브러리를 기반으로 구축되었다. 주요 기능 컴파일 타임 의존성 주입 : Hilt는 앱의 컴파일 타임에 의존성을 주입하여 앱의 성능을 향상시킨다. 이를 통해 앱의 크기를 줄이고 앱의 로딩 속도를 ..

서론 요즘 Android 개발자에게 요구하는 기본 stack 중 하나인 의존성 주입에 대해 정리해보려 한다. 의존성 주입에 Dagger, Hilt, Koin 같은 다양한 라이브러리를 활용하는 것으로 알고 있는데, 라이브러리를 사용하기 전에 의존성 주입에 대한 개념부터 차근차근 정리해보려 한다. 의존성 주입이란? 의존성 주입은 객체 지향 프로그래밍(OOP)에서 사용되는 디자인 패턴 중 하나이다. Android에서 의존성 주입(Dependency Injection)을 흔히 DI라고 부르는데, DI는 Class와 Class 간에 관계를 형성할 때 내부에서 생성하는 것이 아닌, 외부에서 주입하여 관계를 만드는 것을 의미한다. 인터페이스화를 통해 객체 변경에 대한 유연성을 증대시키며, 객체를 내부에서 생성하는 것..

서론 이전에 Retrofit에 대한 포스팅을 작성했었는데, Android project의 규모가 커질수록 API를 활용하는 경우가 잦아질 것이다. 인터페이스를 활용하여 API 응답 처리를 개인이 작성할 수도 있지만, Sandwich라는 간편한 라이브러리가 있어 간단하게 정리해보려고 한다. Sanwich 라이브러리란? Kotlin의 Retrofi 네트워크 응답에서 표준화된 인터페이스 생성을 간소화하기 위해 고안된 라이브러리 다중 아키텍처 내에서 기능 연산자를 활용하여 데이터, 오류 및 예외처리를 효율적으로 할 수 있음 Coroutine, Flow 등과 원활하게 통합되어 다양하게 활용 가능 사용법 build.gradle - 라이브러리 등록 dependencies { implementation "com.git..

서론 기존에 Android에서 DB를 활용하기 위해 SQLite를 사용했었다. Kotlin 공부를 하던 중 Room을 활용하면 SQLite를 보다 쉽게 활용할 수 있다고 하여 정리해 보았다. Room이란? Room은 스마트폰 내장(로컬) DB에 데이터를 저장하기 위해 사용되는 라이브러리다. 평소 사용자가 메모 저장, 일정 저장 등 사용자의 데이터를 내장 DB에 저장하는 경우가 있다. 이때, SQLite라는 DB를 이용해 데이터를 저장했는데 이를 효과적으로 사용하기 위해 등장한 것이 Room이다. SQLite의 단점에 대해서 developer에서 아래와 같이 언급했다. Room을 쉽게 설명하자면, SQLite의 뒤를 이을 새로운 DB가 등장한 게 아니라, SQLite를 보다 간단하게 처리할 수 있도록 도와..

서론 실제로 회사 업무, 프로젝트에서 Android 서비스 개발에 빠질 수 없는 API 호출에 대해 정리해보려고 한다. API 호출에는 비동기 통신의 가장 기본인 AsyncTask부터 라이브러리인 Volley, OkHttp, Retrofit2 등 다양한 방법들이 많다. 이 중 요즘 가장 많이 사용되는 Retrofit을 활용하여 API를 호출하고, 해당 데이터를 앱에서 사용하는 방법에 대해서 알아보자❗️ Retrofit2 Retofit2은 Android 애플리케이션에서 서버와 통신하기 위한 HTTP 클라이언트 라이브러리로, Square 사에서 개발하였다. Retrofit2는 RESTful API와 통신하기 위한 간단하고 강력한 도구를 제공하며, 개발자가 API 호출을 쉽게 관리하고 JSON 또는 XML과 ..

문제 최근 회사에서 프로젝트를 진행하던 중 문의가 하나 들어왔다. "기존에 웹 브라우저에서 앱으로 연결하던 기능에서 앱 선택 화면이 노출되지 않고 바로 앱으로 연결시키도록 변경할 수 있는지" 위 문의에 대한 답변을 주기 위해 찾던 중 원인은 웹 브라우저에서 앱으로 연결할 때 기존에 사용했던 방식이 스키마 방식이었다는 점이었다. 스킴 방식으로 앱으로 연결할 때 앱 선택기가 나오는 이유는 여러 가지 앱이 같은 스킴을 사용할 수 있기 때문이다. 예를 들면, "openapp://" 라는 스킴을 사용했다면, 같은 스킴을 다른 앱에서 사용한다면 앱 선택기로 둘 중 어떤 앱으로 실행시키는지 묻는 앱 선택기가 노출된다. 스킴 방식이 설정이 간단하지만, 위와 같은 한계가 있기 때문에 앱 링크 방식으로 변경하기로 결정했다..

DataStore를 알아보기 전에 앱에 데이터를 저장하는 방법에 대해 먼저 정리해 보자 ❗ 앱에 데이터를 저장하는 방법은 크게 3가지로 나눌 수 있다. 파일 I/O (내부 또는 외부 저장소) : 접근 권한을 획득하고 파일을 열었다 닫았다 하는 수고가 필요하다는 단점이 있음 관계형 데이터 베이스 : SQLite, Room 등을 이용해 복잡한 관계형 데이터를 저장할 수 있음, 간단한 데이터를 저장할 거라면 구축과 관리에 많은 시간과 노력이 요구됨 SharedPreference : Key/Value 형태로 이용함, 내부적으로는 XML 파일로 저장되고 파일을 열고 닫을 필요 없이 핸들러를 만들어서 간편하게 사용가능기존에 앱의 데이터를 간단하게 저장하는 방법으로, SharedPreference를 자주 사용했다. ..

오늘은 Android의 비동기 처리 방법인 코루틴에 대해 소개해보려 합니다. 먼저 코루틴은 Java에서는 불가능하고 Kotlin에서만 가능합니다. 코루틴을 활용하여 API 호출 및 DB Connect와 같은 비동기 작업 처리 코드의 가독성과 성능을 높여줄 수 있습니다. 만약, API 호출이나 DB Connect 등과 같이 무거운 작업들을 비동기적으로 처리하지 않는다면 메인 스레드에 무리가 갈 수 있고, ANR이 발생할 수 있습니다. 1. Coroutine이란? 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. Android에서 코루틴은 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수 있다는 장기 실행 작업을 관리하는데 도움이 됩니다. ..