안드로이드

서론 기존에 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에서 코루틴은 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수 있다는 장기 실행 작업을 관리하는데 도움이 됩니다. ..
최근 MVVM 관련 학습을 하던 중 LiveData와 Databinding을 함께 사용하는 경우가 많았다. LiveData가 사용하는 것이 오늘 정리해 볼 관찰자 패턴이다. Observer Pattern? 관찰자 패턴? 단어 그대로, 무엇인가를 살펴보는 것을 의미한다. 관찰자 패턴은 객체의 상태 변화를 관찰하는 관찰자(옵저버)의 목록을 객체에 등록해서 상태변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 알리도록 하는 디자인 패턴이다. 이 패턴의 핵심은 옵저버 또는 리스너라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시킨다. 그리고 각각의 옵저버들은 관찰 대상인 객체가 발생시키는 이벤트를 받아 처리한다. 이벤트가 발생하면 각 옵저버는 콜백을 받는다. 데이터가 변화하는 것..
MVVM 패턴? 그게 뭔데?? 사실 이러한 디자인 패턴 없이도 어떠한 프로젝트나 서비스를 운영하는 게 가능하다. 그렇다면, 왜 이러한 디자인 패턴이 계속 이슈화되는 것일까? 예를 들어 설명하자면, 패턴 없이 하나의 서비스를 구현하여 앱을 출시했다고 가정하자. 출시하기 전에 당연히 테스트를 마쳤을 것이고, 실제 출시 후 오류가 발생하지 않았다고 하자. 오류에 대한 이슈는 없지만, 만약 실제 사용자들이 기능에 대한 업데이트를 요구한다면? 실제 업데이트를 진행하려고 할 때 구조화되어 있지 않은 코드에서 새로운 기능을 추가하는 일은 쉽지 않을 것이다. 간단한 작업이어도 리소스가 많이 필요해지고, 심한 경우 하나의 코드를 추가하기 위해 전체를 바꿔야 할 수도 있다. 위의 예시처럼, 여러 가지의 기능들이 분리(구조..
서론 Android 앱을 실제 스토어에 배포한 뒤 유지보수, 즉 해당 서비스가 원활하게 돌아가게끔 하기 위해서 오류에 대한 처리는 필수적입니다. 그런데 막상 앱을 스토어에 배포할 때 보안을 위해 Proguard 등과 같은 툴을 사용하여 난독화를 하는 경우에 구글 콘솔을 통해 에러가 발생한 위치를 찾기는 힘듭니다. 이때, Firebase Crashlytics를 사용하면 해당 앱의 에러를 효과적으로 관리할 수 있습니다. Firebase Crashlytics Firebase Crashlytics는 실시간 비정상 종료 보고 도구로 앱 품질을 저하하는 안정성 문제를 추적하고 우선순위를 지정하고 문제를 해결하는데 도움이 됩니다. Crashlytics는 비정상 종료를 지능적으로 그룹화하고 이러한 비정상 종료를 유발하..
Voice Input Voice Input이란 말 그대로 마이크를 통해 입력받을 수 있는 기능이다. 시스템의 내장 음성 인식기 활동을 호출하여 사용자로부터 음성 입력을 얻고, 해당 내용으로 메시지를 보내거나 검색을 실행한다. 앱에서 ACTION_RECOGNIZE_SPEECH 작업을 사용하여 startActivityForResult()를 호출한다. 그러면 음성 인식 활동이 시작되므로 onActivityResult()에서 결과를 처리할 수 있다. 샘플 코드 build.gradle(app) - viewBinding 설정 및 google matreial 추가 buildFeatures { viewBinding true } implementation 'com.google.android.material:materia..
안드로이드 개발을 하다 보면 웹 개발과 달리 px보다 dp를 사용하여 화면을 구성하는 경우가 많을 것이다. px은 화면을 구성하는 최소단위로, 화면의 전체적인 크기와 관계없이 지정한 수치만큼 표시되는 절대적 표시 단위이다. 하지만, 안드로이드 개발 시 사용자들이 사용하는 모든 디바이스에서 최대한 같은 형태로 유지되게 하기 위해 px의 사용은 가급적 피하는 게 좋다. 위의 설명한 내용처럼, dp는 다양한 디바이스 크기에 대응하기 위한 픽셀 독립 단위이다. 화면의 크기가 달라도 동일한 비율로 보여주기 위해 안드로이드에서 정의한 단위이며 큰 화면, 작은 화면에 상관없이 같은 크기로 나타난다. 개발을 하다 보면 dp를 px로 바꾼다거나, px을 dp / dp를 px로 바꿔야 하는 경우가 생긴다. 아래에 변환 코..
빡수수
'안드로이드' 카테고리의 글 목록 (2 Page)