Android 8

Room 데이터베이스 복습 (nowinandroid 를 예로 간단히 살펴보기)

이번에 가벼운 사이트 프로젝트를 진행하는데, MVP 때는 서버 없이 작업하게 되었다. 그에 따라 로컬 데이터소스만을 활용해서 데이터를 관리해야해서 오랜만에 디비 셋업부터 여러 쿼리를 작성하게 되었다. 그래서 앞으로 입문부터 쿼리 예시, 마이그레이션, 서버와 동기화 등의 주제로 포스팅하려하는데 오늘은 그 시작인 입문이다. 왜 로컬에 데이터를 저장해야하는 경우가 생기는지, 왜 Room 을 쓰면 좋은지, 구성요소는 어떻게되고, 기본적인 사용예시까지만 소개하려한다. 로컬에 데이터를 저장해야하는 경우 예시 대부분 인터넷이 끊긴 경우에도 유용한 정보를 보여주기 위함이다. 네이버 웹툰을 즐겨 사용하는 안드로이드 유저라면 지금 인터넷 연결을 해제하고 네이버 웹툰을 들어가보았을 때 인터넷이 끊겼음에도 배너를 제외한 홈화..

Android/Room 2023.01.15

[Android/Kotlin] Jetpack Compose, Navigation component, BottomNavigation 사용하여 화면이동 세팅

사용하게된 계기 첫 회사 입사 후 일을 배우는 것에만 집중하다가, 더 많은 성창을 위해 사이드 프로젝트를 시작했다. 내 사이드 프로젝트의 목표는 기술 경험이 중점이었다. 그래서 회사에서 아직 활발하게 쓰지않는 새로운 기술스택을 사용하기로 했고, UI 툴킷으로 Jetpack Compose 는 내 사이드 프로젝트에서 필수 기술이 되었다. 초반에 컴포즈 공부하고 프로젝트 초반 세팅을 하던 와중에 네비게이션 가능인가? 였는데 역시나였다. 그렇게 Navigation - compose 를 사용하게 되었다. 단순 사용법 단순 사용법은 링크를 확인하는 게 좋을 것 같다. 아래 부터는 바텀 네이게이션을 통합하면서 했던 고민과, Destination 관리, 경로 관련 주의 점을 말하려고 한다. 공식문서 - Compose를..

[Android/Firebase] 기존 프로젝트에 Crashlystics 적용하기

[선 반성] Firebase Crashlytics 는 실시간으로 내가 에러를 확인할 수 있게 해주는 툴이다. 지능적으로 크래쉬를 묶어주고 그 문제가 난 상황을 강조해서 개발자의 트러블슈팅 시간을 줄여준다. 마일스톤에 맞춰 앱 런칭이 제 1의 목표였던 시기를 지나 서비스를 고도화하기 위해 도입을 시작한다. 이제야 적용하게 되는 것을 반성한다. 이번 글은 도입 자체가 주이고(그래서 이론/학습 카테고리) 활용도 (실전/회고 카테고리에) 앞으로 쓸 예정이다. [시작해보기] 시작하려면 먼저 Firebase 에 Crashlytics 를 사용하려는 안드로이드 프로젝트를 등록해야한다.등록이 되어있음을 전제한다.그럼 Firebase Crashlytics 시작하기 | Firebase Documentation Join Fi..

[Android] WorkManager 로 복잡한 백그라운드 작업을 쉽게 해결한다고? (기본 사용법과 예시코드 포함)

[공부하게된 계기] 안드로이드 공부를 시작하고 스레드를 이용한 적은 있지만 앱 프로세스가 죽어서도 백그라운드에서 작업하게 할 일이 없었다. 하지만 최근 타이머 관련 오픈소스 작업을 시도하며, 그리고 과제전형 문제를 풀면서도 백그라운드 작업을 공부하게 되었는데 백그라운드 관련 라이브러리 중에서 최근 가장 핫한 WorkManager 를 공부해야겠다고 생각했다. [그래서 WorkManager 뭘 하는 건가?] 백그라운드 세 가지 작업종류의 persistent work 를 다루는데 추천되는 라이브러리이다. 백그라운드 작업의 종류에 관해서는 내가 전에 써놓은 아래링크를 참고하면 된다. [Android] 안드로이드의 Background 작업 Background 작업이 필요할 때! UI 스레드로 실행이 오래걸리는 작..

[Android/Kotlin] Intent 에 커스텀 객체 전달하기? 직렬화, 역직렬화 Serializable 과 Parcelable, @Parcelize

[시작하며 (반성)] 한 화면에서 다른 화면으로 이동할 때 데이터를 전달하려고하는 데, Primitive type 이 아닌 내가 만든 data class(디자인 패턴을 관점에서는 POJO 클래스, Model) 을 통째로 전달하고 싶을 수 있다. 액티비티 객체는 안드로이드 시스템에서 관리하는 컴포넌트로 데이터 전달에는 Intent 를 사용하기 때문! 그리고 최근에 Jetpack navigation 으로 프로젝트를 진행해왔는데, navigation 라이브러리에서도 Serializable 과 Parcelable 을 지원해서 Fragment 간 객체를 전달할 수 있었다. Serializable 과 Parcelable 의 개념을 안드로이드 공부 시작하고 초반에 접하고 따로 더 공부한 적이 없이 자연스레 사용해서 ..

[Android] Hilt 의 다양한 어노테이션을 알아보자

[DI 가 무엇인지 모른다면?] 아래 링크를 먼저 참고하자 [Android] 안드로이드의 DI (Dependency Injection) [DI 개념과 필요한 이유] 한 클래스는 다른 클래스를 참조해야하는 일이 빈번하다. (특히 디자인패턴을 다루면서) 예를 들어 Computer 클래스를 실행시키려면 Computer 클래스 내에서 Cpu 클래스 객체 nosorae.tistory.com [Hilt 란?] 힐트는 제트팩에서 권장하는 DI 라이브러리이다. 힐트는 Dagger 위에 구축되어있고 대거 컴포넌트를 만든다. (compile-time correctness, runtime performance, scalability 측면에서 이득) 따라서 힐트 역시 compile-time dependencies, runti..

[Android] 안드로이드의 Background 작업

Background 작업이 필요할 때! UI 스레드로 실행이 오래걸리는 작업을 진행한다면 UI 블로킹으로 좋지 못한 UX 를 제공할 것이다. 따라서 bitmap 을 디코딩한다든지, 네트워크 요청이나 저장소에 접근 그리고 머신러닝 모델을 동작시키는 등의 무거운 작업을 할 때는 따로 백그라운드 작업이 필요할 것이다. Background 작업의 3 가지 카테고리와 각 2 가지 타입 백그라운드 작업은 기본적으로 아래 세 가지 카테고리로 분류됨 Immediate 당장 실행해야하고 금방 끝나는 작업 Long-running 끝나는 데 시간이 걸리는 작업, 약 10분 이상 Impersistent 권장 x Persistent 권장 o (따라서 WorkManager 사용 권장) ex 청크할 수 없는 큰 파일 다운로드하는 ..

[Android] 도메인(패키지명) 변경에 주의할 점

프로젝트를 진행하다가 도메인 네임을 변경해야할 상황이 생겼다. 프로젝트를 만든지 얼마되지 않았다면 그냥 새로 파서 코드를 옮겨도 되겠지만 이미 상당부분 진행되어서 Refator - Rename 을 눌러서 바꿔주기로 했다. 하지만 작업하는 파일들의 상단에 위치한 만큼 수동으로 손 봐줘야 할 일이 생겼다. 모든 항목을 다 바꿔주지 않았을까 하는 안일한 생각을 했다가 'No matching client found for package name ~ ' 같은 에러나 패키지명이 업데이트 되지 않은 파일들에 대해 'can not find symbols' 같은 에러를 만나게 되었다. 패키지명 바꾸는 방법 Android Studio 좌측 'Project' 탭을 클릭하고 패키지를 클릭후 위 사진에서 module_basic..