android studio
-
🤔 SQLite? 앱의 데이터를 효율적으로 관리하기 위한 저장소 (로컬 데이터베이스) 소규모 데이터를 관리하고 사용하는데 적합한 관계형 데이터 베이스로, RDB형식(액셀 형태, 행과 열 ) 로 데이터를 저장한다. 속도가 빠르고 가볍다는 장점 이전 프로젝트에서 SQLite를 사용하여 프로젝트를 진행해왔습니다. 하지만 아래와 같은 이유로 인해 SQLite 보다 Jetpack 라이브러리에 포함된 Room을 사용을 권장하고 있습니다. 구글에서는 이러한 문제를 해결하고자 새롭게 Room Database Library를 배포하였습니다. 😮 Room? SQLite 데이터베이스를 쉽고 편리하게 사용할 수 있도록 하는 ORM 라이브러리 ORM은 또 뭐야? (Object-Relational Mapping) ORM이란, O..
[Android] Local Database(SQLite, Room)🤔 SQLite? 앱의 데이터를 효율적으로 관리하기 위한 저장소 (로컬 데이터베이스) 소규모 데이터를 관리하고 사용하는데 적합한 관계형 데이터 베이스로, RDB형식(액셀 형태, 행과 열 ) 로 데이터를 저장한다. 속도가 빠르고 가볍다는 장점 이전 프로젝트에서 SQLite를 사용하여 프로젝트를 진행해왔습니다. 하지만 아래와 같은 이유로 인해 SQLite 보다 Jetpack 라이브러리에 포함된 Room을 사용을 권장하고 있습니다. 구글에서는 이러한 문제를 해결하고자 새롭게 Room Database Library를 배포하였습니다. 😮 Room? SQLite 데이터베이스를 쉽고 편리하게 사용할 수 있도록 하는 ORM 라이브러리 ORM은 또 뭐야? (Object-Relational Mapping) ORM이란, O..
2023.09.12 -
프로젝트에서 livedata를 사용하던 중, mutablelivedata의 setValue()와 postValue() 메소드들 중 하나를 사용하여 값을 넣어줘야 했다. (Feat. 둘 다 MutableLiveData의 값을 변경시키는 메소드이다.) 왜인지 당연하게도 postValue로 데이터들을 넣어주고 있었다... 이번 기회를 통해 setValue와 postValue에 대해서 정확히 짚고 넘어가야겠다. SetValue() 메인 쓰레드에서 값을 바로 변경한다. (바로 변경되므로, getValue()로 값을 바로 가져올 수 있음) 메인쓰레드에서 값을 변경시키므로 Livedata를 관찰하고 있는 Observer는 바로 알아차릴 수 있다. 메인쓰레드에서 값을 dispatch하기 때문에 백그라운드에서 호출하면 ..
[android] setValue() , postValue()프로젝트에서 livedata를 사용하던 중, mutablelivedata의 setValue()와 postValue() 메소드들 중 하나를 사용하여 값을 넣어줘야 했다. (Feat. 둘 다 MutableLiveData의 값을 변경시키는 메소드이다.) 왜인지 당연하게도 postValue로 데이터들을 넣어주고 있었다... 이번 기회를 통해 setValue와 postValue에 대해서 정확히 짚고 넘어가야겠다. SetValue() 메인 쓰레드에서 값을 바로 변경한다. (바로 변경되므로, getValue()로 값을 바로 가져올 수 있음) 메인쓰레드에서 값을 변경시키므로 Livedata를 관찰하고 있는 Observer는 바로 알아차릴 수 있다. 메인쓰레드에서 값을 dispatch하기 때문에 백그라운드에서 호출하면 ..
2023.08.09 -
안드로이드의 UI 동작 안드로이드는 기본적으로 Main Thread (or UI Thread) 하나만으로 구성되는 싱글 쓰레드 모델로 동작한다. 🤔싱글 쓰레드 모델인 이유 만약 멀티 쓰레드 환경이라면, 여러 쓰레드에서 TextView 의 텍스트를 변경하는 상황이 발생하고 어떤 결과가 나타날 지 미지수이기 때문이다. 따라서 동작의 무결성을 보장하기 위해 타 쓰레드에서는 UI 를 건드릴 수 없고, 오로지 메인 쓰레드에서만 UI 관련 동작을 할 수 있게끔 하는 것이다. ✍🏼싱글 쓰레드 모델에서 지켜야할 포인트들 1. 메인 쓰레드 (UI 스레드) 를 블로킹해서는 안 됨 → 메인 쓰레드를 블로킹한다는 뜻은, 사용자에게 보여지는 UI 동작을 멈춘다는 뜻이다. 메인 쓰레드가 블로킹되어 UI 동작이 멈추게 되면, 이는..
[android] Handler & Looper안드로이드의 UI 동작 안드로이드는 기본적으로 Main Thread (or UI Thread) 하나만으로 구성되는 싱글 쓰레드 모델로 동작한다. 🤔싱글 쓰레드 모델인 이유 만약 멀티 쓰레드 환경이라면, 여러 쓰레드에서 TextView 의 텍스트를 변경하는 상황이 발생하고 어떤 결과가 나타날 지 미지수이기 때문이다. 따라서 동작의 무결성을 보장하기 위해 타 쓰레드에서는 UI 를 건드릴 수 없고, 오로지 메인 쓰레드에서만 UI 관련 동작을 할 수 있게끔 하는 것이다. ✍🏼싱글 쓰레드 모델에서 지켜야할 포인트들 1. 메인 쓰레드 (UI 스레드) 를 블로킹해서는 안 됨 → 메인 쓰레드를 블로킹한다는 뜻은, 사용자에게 보여지는 UI 동작을 멈춘다는 뜻이다. 메인 쓰레드가 블로킹되어 UI 동작이 멈추게 되면, 이는..
2023.07.24 -
1. Service란? 서비스란, 안드로이드 4대 컴포넌트 중 하나이며, 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행된다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있다. 2. Service는 언제 사용할까? • 액티비티와 상관 없이 백그라운드에서 동작하는 component • 서버로부터 contents(파일) 다운로드 • 음악 재생 • DB에 저장 • Wi-Fi, BLE 연결 등등 3. Service 종류 포그라운드 서비스: 알림창을 통해 서비스가 실행중인 것을 ..
[android] android service?1. Service란? 서비스란, 안드로이드 4대 컴포넌트 중 하나이며, 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행된다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있다. 2. Service는 언제 사용할까? • 액티비티와 상관 없이 백그라운드에서 동작하는 component • 서버로부터 contents(파일) 다운로드 • 음악 재생 • DB에 저장 • Wi-Fi, BLE 연결 등등 3. Service 종류 포그라운드 서비스: 알림창을 통해 서비스가 실행중인 것을 ..
2023.07.21 -
ViewBinding, DataBinding을 알아보기 전 이 그림을 보자. Databinding이 ViewBinding의 역할도 해주고 있네?? 근데 왜 ViewBinding에 대해서도 알아야하는거지?라고 생각할 수도 있다. 그 이유에 대해서 알아보겠다. ViewBinding? 1) ViewBinding 사용하게 된 이유 기존에는 xml에 있는 textview를 참조하기 위해 findViewById를 사용하여 접근하였다. val textview = findViewById(R.id.tv) textview.text = "입력" findViewById를 사용하여 접근하려면 참조할 때마다 하나씩 선언해주어 참조해야하는데 매우 번거롭다. 또한 findViewById는 Null값을 처리하지 못하여 Null poi..
[android] ViewBinding vs DataBinding ?ViewBinding, DataBinding을 알아보기 전 이 그림을 보자. Databinding이 ViewBinding의 역할도 해주고 있네?? 근데 왜 ViewBinding에 대해서도 알아야하는거지?라고 생각할 수도 있다. 그 이유에 대해서 알아보겠다. ViewBinding? 1) ViewBinding 사용하게 된 이유 기존에는 xml에 있는 textview를 참조하기 위해 findViewById를 사용하여 접근하였다. val textview = findViewById(R.id.tv) textview.text = "입력" findViewById를 사용하여 접근하려면 참조할 때마다 하나씩 선언해주어 참조해야하는데 매우 번거롭다. 또한 findViewById는 Null값을 처리하지 못하여 Null poi..
2023.07.12 -
ViewModel은 대부분 MVVM 패턴에서 사용되는 Model, View, ViewModel 용어에서 들어봤을 것이다. 구글이 개발자들을 위해 Clean Architecture를 쉽게 구현할 수 있도록 라이브러리들을 만들었는데 이를 Android Architecture Components (AAC)라고 부르며 그중 하나가 바로 ViewModel이다. Android Jepack의 구성요소 중 하나로, 본래 ViewModel이란 이름은 소프트웨어 개발 디자인 패턴중 하나인 MVVM(Model — View — ViewModel) 디자인 패턴으로부터 파생되었다. 뷰모델 클래스 ❓ 1. 수명 주기를 고려해 UI 관련 데이터를 저장하고 관리하도록 설계됐다. 2. 뷰모델 클래스를 사용하면 화면 회전 같이 구성을 변..
[android] ViewModel란?ViewModel은 대부분 MVVM 패턴에서 사용되는 Model, View, ViewModel 용어에서 들어봤을 것이다. 구글이 개발자들을 위해 Clean Architecture를 쉽게 구현할 수 있도록 라이브러리들을 만들었는데 이를 Android Architecture Components (AAC)라고 부르며 그중 하나가 바로 ViewModel이다. Android Jepack의 구성요소 중 하나로, 본래 ViewModel이란 이름은 소프트웨어 개발 디자인 패턴중 하나인 MVVM(Model — View — ViewModel) 디자인 패턴으로부터 파생되었다. 뷰모델 클래스 ❓ 1. 수명 주기를 고려해 UI 관련 데이터를 저장하고 관리하도록 설계됐다. 2. 뷰모델 클래스를 사용하면 화면 회전 같이 구성을 변..
2023.07.09 -
이 그림은 안드로이드 공식문서에서 가져온 그림이다. 앱을 설계할 때 UI와 관련된 데이터는 ViewModel + LiveData로 관리하도록 권장하고 있다. 이번 게시글은 LiveData에 대해 이야기해보겠다. LiveData 는 Observer 패턴을 활용하여, Lifecycle 에 따르며 데이터를 관리 이름 그대로 '실시간' 그 자체의 데이터, 즉 항상 최신 데이터를 보증한다는 특징이 있다. Observer? 위에서 말한 observer가 무엇인지 궁금할 수 있다. 나는 livedata를 몰랐을 때는 데이터를 일일이 UI에 업데이트 해주었다..(이건 클린 아키텍처가 아니다.) 그렇다면 매번 데이터를 관찰해주는 관찰자 역할이 있다면 어떨까? 안드로이드에서 Observer가 그런 개념이다. 데이터가 변경..
[android] Livedata란? (feat.ViewModel)이 그림은 안드로이드 공식문서에서 가져온 그림이다. 앱을 설계할 때 UI와 관련된 데이터는 ViewModel + LiveData로 관리하도록 권장하고 있다. 이번 게시글은 LiveData에 대해 이야기해보겠다. LiveData 는 Observer 패턴을 활용하여, Lifecycle 에 따르며 데이터를 관리 이름 그대로 '실시간' 그 자체의 데이터, 즉 항상 최신 데이터를 보증한다는 특징이 있다. Observer? 위에서 말한 observer가 무엇인지 궁금할 수 있다. 나는 livedata를 몰랐을 때는 데이터를 일일이 UI에 업데이트 해주었다..(이건 클린 아키텍처가 아니다.) 그렇다면 매번 데이터를 관찰해주는 관찰자 역할이 있다면 어떨까? 안드로이드에서 Observer가 그런 개념이다. 데이터가 변경..
2023.07.09 -
최근 비동기 프로그래밍인 코루틴에 대해 공부하고있다. 내가 아는 비동기 프로그래밍들에 대해 들어본 것들은 RxJava, Asyncfunction(현재 deprecated됨), Coroutine 정도였다. 몇 일동안 코루틴의 개념에 대해 공부하였고, 사용방법, 코루틴의 다양한 활용 예시들을 보면서 작동되는 과정들을 이해하였다. 아직 다양한 방법으로 활용하는 것은 무리가 있어 최근 진행하였던 프로젝트를 코루틴을 사용하여 '리팩토링' 해보았다. 기존 코드에선 Retrofit을 이용하여 서버와 통신할 때 enqueue를 사용하여 비동기 처리를 해주었다. 하지만 Coroutine을 사용하면 enqueue를 사용하지않고 Retrofit 통신이 가능하였다. Retrofit + enqueue interface GetP..
[TIL] Retrofit + Coroutine 사용하기 (feat. enqueue 비동기)최근 비동기 프로그래밍인 코루틴에 대해 공부하고있다. 내가 아는 비동기 프로그래밍들에 대해 들어본 것들은 RxJava, Asyncfunction(현재 deprecated됨), Coroutine 정도였다. 몇 일동안 코루틴의 개념에 대해 공부하였고, 사용방법, 코루틴의 다양한 활용 예시들을 보면서 작동되는 과정들을 이해하였다. 아직 다양한 방법으로 활용하는 것은 무리가 있어 최근 진행하였던 프로젝트를 코루틴을 사용하여 '리팩토링' 해보았다. 기존 코드에선 Retrofit을 이용하여 서버와 통신할 때 enqueue를 사용하여 비동기 처리를 해주었다. 하지만 Coroutine을 사용하면 enqueue를 사용하지않고 Retrofit 통신이 가능하였다. Retrofit + enqueue interface GetP..
2023.07.05