본문 바로가기
반응형

Android 개발231

MutableStateFlow 이용한 로딩 후 로딩 완료 기다리기 구현 방법 AdView처럼 라이브러리에 로딩을 시키고, 해당 로딩이 다 될 때까지 기다릴 때 어떻게 구현해야 하는지 정리해 보겠습니다. 1. Mode 설정 먼저 여러가지 모드를 설정하기 위해서 다음과 같이 Mode에 관한 sealed class를 하나 작성해 줍니다. 이것은 로딩에서 로드가 완료되었을 때를 알기 위해서 인데요. 광고라이브러리에서는 보통 콜백으로 로드가 다 되었을 때 호출되는 onAdLoaded 와 같은 함수를 제공해 주므로, 이러한 콜백함수에서 Mode를 Loaded로 해주고, 로딩을 시작할 때, Loading으로 모드를 설정해 주면 되겠지요. sealed class AdMode { object Loading : AdMode() object Loaded : AdMode() data class Err.. 2023. 4. 8.
lateinit 에 관한 정리 # Kotlin 오늘은 Kotlin 의 lateinit 에 대해서 정리해 보도록 하겠습니다. 1. lateinit lateinit은 키워드 자체로 설명이 되어있는데요. 초기화(initialize)가 late하게 된다는 의미를 가지고 있습니다. 이 키워드를 사용하면, 컴파일러는 변수 선언시에 초기화가 되지 않아도 아무런 에러를 보여주지 않구요. 개발자가 원하는 시점에 초기화를 할 수 있도록 해 줍니다. 게다가 lateinit 을 이용해서 선언할 경우, onDestroy에서 null 로 다시 값을 넣어줄 필요가 없습니다. 이 객체는 자동으로 가비지콜렉터에 의해서 해당변수가 포함된 클래스가 destroy 될 때 함께 처리됩니다. 예를 들어서 아래와 같이 adView나 adRequest를 초기화 하지 않은 상태에서 미리 선언하.. 2023. 4. 7.
RoomDB 에서 One to Many 관계 구현하기 # 채팅 DB 구현 오늘은 RoomDB에서 One to Many 관계를 구현하는 방법에 대해서 정리해 보도록 하겠습니다. 이 글에서는 채팅의 예를 볼 텐데요. 채팅의 경우, 하나의 채팅룸에 다량의 메시지가 들어가는 one to many 구조를 가지고 있기 때문입니다. 참고로 이 글에서는 RoomDB구현에 대해서는 다루지 않으므로, 이에 관해서는 아래 글을 참조해 주세요. >> Room DB 사용방법 총정리 # Android SQLite 1. 구현 전 필요한 채팅과 채팅룸 Entity 채팅과 채팅룸의 one to many 관계를 구현하기 전에 이들의 Entity가 있어야 하는데요. 먼저 채팅룸 Entity는 다음과 같습니다. @Entity(tableName = "chat_rooms") data class ChatRoom( @.. 2023. 4. 7.
Room DB 사용방법 총정리 # Android SQLite 오늘은 andoird의 Room DB에 대해서 정리해 보도록 하겠습니다. 개인적으로는 Realm을 선호하기는 하지만, Android Architecture Library의 LiveData나 ViewModel과 함께 잘 사용할 수 있는 라이브러리라는 점에서는 매력적이라고 생각합니다. 1. Room 1-1. Room 정식명칭은 Room Persistence library이고요. ORM(Object Relational Mapping)으로서, SQLite 데이터베이스를 사용하기 쉽도록, 데이터베이스를 객체로 매핑해 주는 역할을 합니다. SQLite를 Annotation을 이용해서 좀 더 사용하기 쉽게 추상화했다고 보면 될 것 같은데요. 1-2. Types Room 에서 지원하는 타입은 다음과 같은 것들이 있습니.. 2023. 4. 4.
RemoteConfig 이용해서 다이나믹하게 앱 업데이트 하기 # Android 안드로이드 앱을 만들면서 상황에 맞게 앱을 변경하거나 유저에게 알려야 할 경우가 있습니다. 가장 쉽게 생각해 보면, 앱에서 비정기적인 공지를 보여주거나, 앱의 업데이트된 버전을 확인할 수 있도록 하는 것인데요. RemoteConfig을 이용하면 이러한 일들을 쉽게 할 수 있습니다. 오늘은 RemoteConfig 을 이용하는 방법에 대해서 정리해 보겠습니다. 1. RemoteConfig 앱을 다운로드 할 필요없이 앱의 형태와 동작을 변경할 수 있도록, 구글에서 제공해주는 클라우드 서비스의 형태로 Firebase서비스의 일부인 RemoteConfig입니다. 공식문서에 소개된 이 API의 Architecture는 아래와 같이 구성되어 있습니다. 아직은 무슨 말인지 모를 수 있으니, 휙 둘러보고, 아래글을 다 .. 2023. 3. 23.
ktlint 린트툴 적용하는 방법 정리 # Android Lint 오늘은 KTLint 라는 라이브러리에 대해서 정리해 보도록 하겠습니다. KTLint 에 대해 알아보기전에, lint 툴에 대해서 간단히 알아보고 가겠습니다. 1. lint 린트나 린터라고도 불리는 데요. 이것은 코드에서 버그나 익셉션이 발생할 만한 곳을 표시해주는 툴을 가르킵니다. 다양한 라이브러리가 이러한 툴로 사용되는데요. 추가적으로 Typo(타이핑에러)나 코드 스타일까지도 일관되도록 체크를 해 줍니다. Android Studio에서는 사실 이미 이러한 lint를 제공해주고 있습니다. 코드 작성시에 안드로이드에서 Typo나 발생할 수 있는 문제들을 알려주고 있는 것은, lint 툴들이 동작하고 있기 때문입니다. 특정 파일을 정해서 체크할수도 있는데요. 네비게이션에서 체크를 할 파일을 선택하고, 오른쪽.. 2023. 3. 15.
Elvis 연산자 의 활용법 총정리 # null 체크 throw 오늘은 Kotlin 의 Elvis Operator 의 활용법에 대해서 정리해 보도록 하겠습니다. 1. Elvis Operator Null 에 대해서 철저한 Kotlin 언어에서는 이에 대한 코드가 길어질 수 밖에 없는데요. elvis 연산자는 null이 나올 수 있을 때, null대신에 다른 값을 부여할 수 있도록 도와줍니다. 표현식이 매우 간결해서 보기에도 편하고 유지보수하기에도 좋습니다. 아래에서는 testValue 가 null 이면, "Default값"을 사용하라고 하는 것을 간결하게 표현해 준 것 입니다. testValue ?: "Default값" 아래와 같이 코드를 활용할 수도 있습니다. 2. return 을 사용한 Null 체크 Elvis 연산자에 null 대신 return 키워드도 넣어서 실.. 2023. 1. 15.
require 와 Check 로 코드에 조건 부여하기 # Kotlin Kotlin에서는 require 와 check 라는 함수를 제공해 주고 있는데요. 이 함수들을 이용하면, 코드에서 명시적으로 특정한 조건을 확인할 수 있습니다. Null 체크나 상태를 확인할 때 도움이 되는데요. 오늘은 이것에 대해서 알아보도록 하겠습니다. 1. require 와 requireNotNull 1-1. require require함수에 인자로 들어가는 조건을 맞추어 주지 못한다면, IllegalArgumentException 를 발생시켜 줍니다. 반드시 필요한 조건이 있을 때 이 함수를 사용해주면 좋습니다. 아래에서는 0이상인 숫자가 아니면 Exceptin이 나오게 하였습니다. 2023. 1. 14.
Firebase Analytics 에서 사용자 OS 분석하기 # API21 오늘은 Firebase Analytics에서 앱사용자의 OS버전을 알아보는 방법에 대해서 정리해 보도록 하겠습니다. 이 글은 Firebase 라이브러리가 이미 적용되었다는 가정하에 쓴 글로, Fireabase analytics 설치나 적용코드에 관한 글은 다른 글에서 정리하도록 하겠습니다. 1. API21 이하 찾아보기 안드로이드 OS의 큰 분기점이라고 할 수 있는 버전이 API21입니다. Retrofit 도 그렇고 여러가지 라이브러리들이 이 버전을 분기로, 더 이상 지원을 하지않고 있기도 합니다. API21은 14년도에 출시된 버전으로서 Android5 (Lollipop)버전이 되겠습니다. 그럼, 현재 앱 사용자들의 버전을 알아야 할 텐데요. Firebase가 그것을 가능하게 해 줍니다. 먼저 Fire.. 2023. 1. 5.
Java 프로젝트에 Kotlin 추가하기 # Android Studio 오늘은 Java로 되어있는 안드로이드 프로젝트에 Kotlin을 추가하는 방법에 대해서 정리해 보도록 하겠습니다. 1. Kotlin 파일 추가하기 안드로이드 공식사이트에서 제시하는 방법은, 먼저 Kotlin파일을 추가하고, 그에 따라서 나오는 인터랙션한 메뉴를 사용하라는 것 인데요. 한번 보도록 하겠습니다. java디렉토리에서 "New > Kotlin Class"를 선택해 줍니다. 2022. 12. 14.
Android Studio Java Runtime Version 에러 발생시 대응 방법 # Gradle 오늘은 Android Studio에서 라이브러리 설치 후에 Java Version에러 발생시 대응하는 방법에 대해서 정리해 보겠습니다. 1. Java Version 아래는 hilt 라이브러리를 dependency를 선언한 후 발생한 에러인데요. 현재 프로젝트에서 사용중인 Java버전인 52와 라이브러리의 플러그인에서 사용하는 버전인 55가 사용이 안된다는 말 입니다. 그럼 버전을 바꾸어 주어야 할 텐데요. 위에서 말하는 52버전은 Java8을 말하구요. 55버전은 Java11을 가르킵니다. 2022. 12. 10.
Target Api 31 ( Android12 ) 에서 적용해야 하는 사항들 # Location Intent Filters exported mutability 이제 개발하는 앱들은 모두 targetAPI를 31로 잡아야 하는데요. 오늘은 어떤 것들에 대응해야 하는지 정리해 보도록 하겠습니다. 1. TargetAPI 31(Android12) 22년 11월 부터는 TargetAPI가 31이하일 경우에는 아래와 같은 경고메시지를 보게됩니다. 신규제출하는 경우에는 이미 22년 8월부터 적용되어 있었구요. 기존앱들의 업데이트의 경우 targetAPI31을 반드시 지켜야 합니다. 2022. 12. 1.
Admob 을 Jetpack Compose 에서 구현하는 방법 # AndroidView 오늘은 Jetpack Compose으로 Admob을 구현하는 방법에 대해서 정리해 보겠습니다. 참고로 Firebase가 현재 앱과 연결되어 있지 않다면, 먼저 아래 링크를 참조해서 firebase에서 프로젝트를 생성하고 google-services.json 파일을 저장해주어야 합니다. (https://firebase.google.com/docs/android/setup) 1. Admob 모듈 dependency 설정 1-1. project level build.gradle project 레벨의 build.gradle에는 다음과 같이 google-services를 추가해 줍니다. buildscript { repositories { google() // Google's Maven repository mave.. 2022. 11. 30.
Admob 테스트 기기등록하는 방법 # 부정클릭 방지 오늘은 Android 에서 Admob을 구현시에, 반드시 해야하는 테스트기기 등록하는 방법에 대해서 정리해 보도록 하겠습니다. 이것을 하지 않고 테스트를 하다가 광고를 클릭하게 되면, 무효클릭 혹은 부정클릭 에 해당되어서 페널티를 받게 될 수 있습니다. 1. Logcat 읽어오기 정상적으로 Test기기에 Admob을 구현해서 배포해 보면, 다음과 같은 로그를 볼 수 있습니다. 이 때, Arrays.asList안에 들어가 있는 값이 해당 device의 ID입니다. 2. Configuration 설정 Configuration은 최초에 한번만 해주면 되기 때문에, Initialize를 했던 Application클래스에서 추가해주면 되는데요. 아래와 같이 RequestConfiguration을 빌드해주면 되는데.. 2022. 11. 29.
Crashlytics 구현해서 catch 한 Exception 로그 받기 # 에러 로깅 CrashLytics는 앱이 Crash가 났을경우에 알림을 주는 역할을 해 줍니다. 마켓에 앱을 출시했다면, 필수로 사용해야 한다고 할 수 있는데요. Crash를 알려주는 주 기능이외에도, 다양한 기능들이 있지만, 그중에서도 catch한 Exception에 대해서도 알림을 받는 것이 특히 유용합니다. 오늘은 이 방법에 대해서 정리해 보겠습니다. 만약 Firebase내에 현재 앱의 project가 생성되어 있지 않다면, 먼저 아래 링크를 참조해서 프로젝트를 생성해 주세요. (https://firebase.google.com/docs/android/setup) 1. CrashLytics 라이브러리 implementation 1-1. project level의 build.gradle 먼저 project 레벨 .. 2022. 11. 26.
Contentprovider 와 ContentResolver 이용한 CRUD # Mime-type Uri 오늘은 ContentProvider 와 ContentResolver에 대해서 정리해 보도록 하겠습니다. 1. Content Provider 와 ContentResolver 1-1. Content Provider 원래 Data들은 되도록이면 각 앱별로 Private하게 저장하고 Access하는 것이 안전한데요. 반대로 주소록이나 전화기록, Media(Audio, Video, Photo) 데이터들은 그렇지 않습니다. 예를 들어서, 주소록 데이터를 앱별로 앱내 Private Directory에 저장하기 보다는, ContentProvider에 저장하고, 다른 앱에서도 공유해서 사용하는 것이지요. 이러한 Data들은 앱들간에 자유롭게 Access 할 수 있어야 하는 부분입니다. ContentProvider는 컨텐.. 2022. 11. 18.
Uri 에서 Bitmap 파일 생성하는 방법 # getBitmap ImageDecoder 오늘은 Uri를 가지고 Bitmap 파일을 만드는 방법에 대해서 정리해 보도록 하겠습니다. 1. 필요한 API 1-1. ImageDecoder 와 ContentResolver API28부터 지원되기는 하지만, 파일을 Drawable 또는 Bitmap으로 전환시켜줍니다. 정말 다양한 소스로부터 Bitmap객체를 만들어주도록 도와주는데요. 마침 이 API가 uri소스로부터 Bitmap 객체를 만들어주는 createSoruce함수도 제공해주고 있습니다. 광고 ImageDecoder에는 첫번째 인자로 ContentResolver객체를 필요로 하는데요. ContentResolver는, Uri를 이용해서, ContentProvider로부터 데이터의 CRUD(create, retrieve, update, and de.. 2022. 11. 17.
Android 리소스 정리시 사용하는 Naming Convention 오늘은 Android 리소스 Naming Convention에 대해서 정리해 보도록 하겠습니다. 여기서 사용한 naming 규칙은 개인적으로 정리한 것이니 참조만 해 주세요. 1. Drawable Naming drawable에 들어가는 이미지 파일들의 prefix에는 아래와 같은 타입들을 사용해 주는데요. 가능하다면, "이미지구분_무엇_어디에서" 순서로 정해서 사용하는 것이 좋습니다. 구분 Prefix 예 Button btn_ btn_download Icon ic_ ic_like_feed Launcher Icon ic_launcher ic_launcher_myapp Menu menu_ menu_more CheckBox chb_ chb_alarm Tab ic_tab ic_tab_something 2022. 11. 12.
Room DB 에 DB파일 넣어서 사용하기 # 로컬데이터베이스 SQLite 오늘은 RoomDB에 미리 데이터를 넣어서 사용하는 방법에 대해서 정리해 보도록 하겠습니다. 참고로 이 글은 RoomDB를 알고 있어야 이해할 수 있으므로, Room에 관한 기본적인 사항은 아래 글을 참조해 주세요. >> Room Persistence Library 총정리 # Android SQLite 1. SQLite 파일 1-1. Room 과 SQLite Room에 대한 설명을 보면, SQLite위에 추상레이어를 제공하는 라이브러리라는 설명이 나옵니다. RoomDB에 디비파일을 미리 넣을 때 어떤 파일을 넣어야 하는지 감이 옵니다. 바로 SQLite db파일입니다. 1-2. SQLite 파일 생성 만약 NodeJS의 Express Django같은 프레임워크를 사용한다면, SqLite3 모듈을 이용해서.. 2022. 11. 4.
Android 에서 동적 권한 얻기 # State registerForActivityResult Runtime Permission 안드로이드를 앱을 개발하면서, 부딛히는 어려움 중 하나는, 바로 Runtime Permission 입니다. 이 글을 쓰고 4년뒤인 지금 Kotlin코드로 다시 업데이트하였는데요. Android OS버전이 올라가면서 유저에게 승인받아야 할 권한은 계속 늘어나고 있습니다. (심지어 Notification도 권한을 받아야 한다고 하는군요.) Runtime Permission은 External Storage와 관련된 작업인, 주소록이나, DB파일 혹은 이미지캐쉬를 저장하거나, 위치를 사용하는 앱일 경우에는 반드시 넘어야 할 산인데요. 오늘은 유저에게 외부저장소의 읽고 쓰기에 대해 동적으로 권한을 요청하는 것을 가지고 정리해 보도록 하겠습니다. 1. Manifest 선언먼저 먼저 Manifest에서 권한을 얻는다.. 2022. 10. 24.
StateFlow 정리 # Android Kotlin Coroutine getStateFlow StateIn 오늘은 Kotlin의 StateFlow 에 대해서 정리해 보도록 하겠습니다. StateFlow도 Flow API의 하나인데요. Flow에 대한 내용은 아래 글을 참조해 주세요. >> Kotlin Coroutine Flow 총정리 part3 # launchIn 1. StateFlow StateFlow는 업데이트가 가능한 데이터값을 가지는 State라는 것을 가지고, collector에게 emit(전파)하는 인터페이스입니다. SharedFlow를 상속받은 인터페이스 이기도 한데요. State를 가지고 있다가, 변경되면 emit을 해주는 역할을 하는 핫스트림이라고 생각하면 됩니다. 핫스트림과 콜드스트림에 대해서는 아래 글을 참조해 주세요. >> Kotlin Coroutine Flow 총정리 part3 # la.. 2022. 10. 12.
Sealed Class 총정리 feat. enum Class 오늘은 Kotlin의 Sealed Class에 대해서 알아보도록 하겠습니다. 1. Sealed Class 와 Interface 1-1. Sealed Class 와 Interface Seal의 뜻은 밀봉하다 봉인하다는 뜻인데요. SealedClass는 abstract클래스여서 객체로 만들수 없는 자신과, 자신을 직접 상속받는 서브클래스나 interface 들로 구성되어 있습니다. 외부의 다른 Class들은 이 sealed클래스로부터 상속을 받을 수 없도록 봉인되어 있습니다. 이렇게 외부에서 확장되지 않은 밀봉된 구조를 가짐으로서, 컴파일타임에 코드를 작성하면서, 서브클래스들에 접근해서 사용이 가능해 지는 것 이지요. 이 서브클래스들은 각각의 특성에 따라서 다양한 생성자를 가질 수 있는데요. 데이터를 받아서.. 2022. 10. 11.
Kotlin By 키워드에 대한 이해 # Property Delegate Pattern 오늘은 Kotlin에서 많이 사용되는 by 키워드에 대해서 정리해 보려고 합니다. by 키워드에 대해 알아보기 전에, 그 근간이 되는 Deletgate Pattern에 대해서 알아 보도록 하겠습니다. 1. Delegate Pattern 에 의한 Class Delegatation (클래스 위임) Delegate 라는 의미는 위임한다는 뜻 입니다. 프로그래밍에서 자주 등장하는 용어이기도 한데요. 코드를 보면서 이해해 보도록 하겠습니다. 아래에는 같은 Car라는 인터페이스를 상속받는, Tesla라는 클래스와 Kia라는 클래스가 있습니다. Testla는 일반적인 클래스 이구요. Kia는 Delegate패턴을 이용하였습니다. 2022. 10. 11.
Kotlin Coroutine Flow 총정리 part3 # launchIn 지난 글에 이어서 part3에서는 Coroutine의 Flow에 대해서 정리해 보도록 하겠습니다. 지난 part1과 part2는 아래 링크를 참조해주세요. >> Kotlin Coroutine 총정리 part1 # launch, async, Context, Job, CoroutineScope >> Kotlin Coroutine 총정리 part2 # Cancellation, ExceptionHandling 1. Flow 1-1. Flow Coroutine의 suspend 함수는 비동기이기는 하지만 값을 하나만 return해 줍니다. 지속적으로 혹은 한번에 여러개의 값들이 나오는 경우에 대응하기 위해서 만든, Coroutine의 비동기 스트림 API가 flow입니다. RxJava API를 사용해보았다면 사용방.. 2022. 10. 10.
Kotlin Coroutine 총정리 part2 # Cancellation Exception Handling 이 글은 이전글에 이어서, Exception Handling과 Cancellation 그리고 여러개의 Job을 다룰때의 주의점등에 대해서 정리해 보겠습니다. 참고로 이전 글을 아래 링크를 참조해주세요. >> Kotlin Coroutine 총정리 part1 # launch async Context Job CoroutineScope 1. Exception Handling cancel된 Coroutine은 CancellationException을 전파한다는 것을 알게 되었는데요. 이것은 suspension포인트에서는 무시됩니다. 이것은 cancel을 위한 정상적인 방법이기 때문입니다. 1-1. Exception의 전파 코루틴의 Exception전파에 있어서는 2가지로 나누어 지는데요. Exception 전파 .. 2022. 10. 9.
Kotlin Coroutine 총정리 part1 # launch async Context Job CoroutineScope 오늘은 Kotlin의 Coroutine에 대해서 정리해 보도록 하겠습니다. 1. Coroutine Kotlin에서 네트워크 호출이나 디스크아이오 같은 비동기 코드를 다룰 때 언급되는 것이 Coroutine인데요. 공식문서에서의 Coroutine에 대한 정의를 보면, suspendable한 Computation이라고 나와있습니다. suspend는 중단하다 혹은 유예하다의 뜻 인데요. 필요할 때 마다 suspendable한 단위의 코드들이, suspend 되었다가 다시 깨어나서 resume 하여 과업을 완료한다는 것 입니다. 그리고 Coroutine과 쓰레드는 컨셉적으로는 비슷하지만, 쓰레드는 아닙니다. 한 쓰레드에서 suspend 되었다가, 다른 쓰레드에서 깨어나서 실행될 수 도 있는 좀 더 가볍고 작은 .. 2022. 10. 7.
Kotlin 확장 함수 및 Property 에 대한 정리 # Extension Functions Kotlin을 이용하면 기존 Class와 Interface의 확장이 매우 용이합니다. 오늘은 이러한 확장을 가능하게 하는 중요한 개념인 Extension Functions 와 Extension Property에 대해서 정리해 보겠습니다. 1. Extension Functions 와 Extension Properties 1-1. Extension Functions 와 Extension Properties 여기서 사용된 Extention의 뜻은 확장 또는 연장인데요. Kotlin에서는 Class나 Interface를, 다른 Class나 Interface에서 상속받지 않고도, 함수를 추가하거나 Property를 추가함으로서 확장할 수 있는 능력을 제공해주고 있습니다. 예를 들어서, 만약 Retrofit이나 G.. 2022. 10. 4.
HILT 에 대해서 정리해 보겠습니다. # DI Dependency Injection 오늘은 Hilt를 이용한 Dependency Injection에 대해서 정리해 보도록 하겠습니다. Dependency Injection에 대해 경험이 없으신 분들이라면, 아래 글을 통해서 기본적인 개념에 대해서 이해해 보시면 도움이 될 것 같습니다. 특히 Dependency를 주입해준다는 말의 의미에 대해서 이해해 보아야 합니다. >> Dependency Injection(DI)에 대해서 알아보자 이제 DI에 대해서 이해가 가신다면, HILT에 대해서 알아보도록 하겠습니다. 1. HILT HILT는 Google의 Dagger를 기반으로 만든 Dependency Injection 라이브러리인데요. 공식문서에는 Hilt의 목표에 대해서 아래와 같이 정리하였는데요. Kolin이 Kotlin에 특화된 심플한 D.. 2022. 9. 16.
Dagger를 통한 Dependency Injection 구현 오늘은 Dependency Injection에 대한 지난 글에 이어서, Dagger를 통해서 어떻게 이를 구현하는지 정리해 보려고 합니다. 혹시 이전 글을 읽지 못하신 분들은아래 글의 링크를 참조해 주세요. Dependency Injection(DI)에 대해서 알아보자 Dagger1은 Retrofit등 유명한 라이브러리를 개발한 Square사의 작품이구요. 현재 사용되는 Dagger2는 구글에서 포크하여 개발하고 있습니다. 무조건적인 신뢰는 좋지 않습니다만, 이들 회사의 네임밸류와 포트폴리오 만으로도, 라이브러리에 대한 믿음이 생기는 건 어쩔수가 없네요. 그럼 Dagger를 구현하는 방법에 대해서 정리해 보도록 하겠습니다. 1. dagger2를 통한 구현준비 1-1. 라이브러리 Implement 라이브러.. 2021. 12. 22.
LifeCycle과 ViewModel 그리고 LiveData에 대해 정리해 봅니다 오늘은 구글의 Architecture Components에 들어가 있는, LifeCycle과 ViewModel 그리고 LiveData에 대해서 정리해 보겠습니다. 양으로 보면 각각의 컴포넌트에 대해서 하나의 글로 정리하는 것이 좋지만, 서로 연결되어 있는 부분들이 많아서 같이 정리하는 것이 효율적일 것 같네요. 1. LifeCycle과 ViewModel 그리고 LiveData 이 세가지 Component를 사용하는 방법은 다음과 같은데요. View를 담당하는 UI컨트롤러인 Activity나 Fragment를 최대한 가볍게 하고, 뷰의 데이터에 대한 부분은 ViewModel에게 맡기게 한다음, 데이터의 변화값을 관찰하고 변경하는 LifeData에게 맡기기 위함입니다. 이 과정에서 LifeCycle을 고려하.. 2021. 9. 24.