본문 바로가기

전체 글

(29)
Hilt(의존성 주입 라이브러리) Hilt가 무엇인지 알기전에 기본적으로 DI(의존성 주입)이 어떤 것을 의미하는지 알아야 할 필요가 있다. 아래 공식문서에서 매우 잘 설명해놨으니까 기억이 나지 않는다면 다시 복습해보자. 안드로이드에서 말하는 의존성 주입이란? https://developer.android.com/training/dependency-injection 수동으로 사용하는 의존성 주입 (deggar나 hilt를 사용하는게 왜 기존의 의존성 주입을 사용하는 것보다 더 나은지 잘 모르는 경우 참고하자.) https://developer.android.com/training/dependency-injection/manual 라이브러리(hilt, dagger)를 사용하지 않은 의존성 주입의 단점 Compared to dependenc..
동기(Synchronous), 비동기 (Asynchronous), blocking, non blocking 동기(Synchronous : Sync(동시) + chrono(시간)) -어떤 작업이 다 끝나고 난 뒤에 가능한 작업. 다르게 표현하면 원래 진행됐던 작업이 제어권을 다른 작업에게 넘겨서 자신은 일을 못하고 그 다음 작업이 일을 진행하는 것이다. 예시 : 음식점에서 배달의 민족 주문이 들어왔다고 치자. 주문이 들어가기 전까지는 요리사가 딱히 어떤 작업을 하고 있지 않다. 하지만 주문이 들어오고 나서 음식의 조리를 시작한다. 주문자는 음식을 수령하기 전까지는 별다른 일을 하고 있지 않다. (제어권을 요리사에게 넘긴 셈이다.) 요리사는 음식의 준비가 완료되면 포장을 하고 배달 기사님께 전달드린다. (제어권이 요리사에서 배달기사에게로 넘어간다.) 배달기사는 음식을 수령받기 전까지는 별다른 일을 하고 있지 않다..
DiffUtil이란? 출처 : https://developer.android.com/reference/androidx/recyclerview/widget/DiffUtil DiffUtil은 두개의 리스트를 비교해서 차이가 있으면 두번째 리스트에 차이점을 업데이트 해주는 유틸리티 class 이다. 리사이클러뷰의 어댑터가 업데이트될때 사용된다. 백그라운드 스레드에서 DiffUtil을 쉽게 사용할 수 있는 ListAdapter와 AsyncListDiffer 클래스를 살펴보길 바란다. DiffUtil은 Eugene W.Myer의 최소한의 횟수로 리스트를 수정해줄 수 있는 알고리즘을 사용해서 리스트를 변경해준다. (유진 마이어의 Diffing Algorithm을 의미한다. 한국어로 하면 비교 알고리즘이다.) Myer의 알고리즘은 변동된..
리사이클러뷰 데이터가 꼬일때 해결하는 방법 리사이클러뷰기능을 구현할 때는 항상 적어도20~30개 이상의 데이터를 넣어보고 테스트 하는게 좋다고 한다. 그렇게 해야지 뷰에 문제가 생기는지 아닌지 확인할 수 있기 때문이다. 재활용을 제대로 하지 못하면 이전에 사용했던 뷰홀더가 다시 나타나서 원치 않은 대로 기능이 동작할 수 있다. 위의 동영상과 같이 말이다. 이 문제가 발생하는 원인은 리사이클러뷰의 특징상 사용했던 뷰홀더를 재사용 하기 때문이다. 리사이클러뷰의 아이템을 롱클릭 하면 색상이 변하게끔 기능을 구현했다. 하지만 스크롤을 위아래로 내리고 바꾸다 보면 롱클릭으로 색상을 바꾸지 않은 녀석들도 바뀌는 것을 볼 수 있다. 리서치를 해봤는데 문제를 해결하는 다양한 방법이 있었다. 방법1 : getItemViewType(int position) 메소드..
예외처리 출처 : '이것이 자바다' 컴퓨터 하드웨어의 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 자바에서는 "에러"라고 한다. 개발자가 어떤 노력을 해도 이를 해결할 방법은 없다. 자바에서는 에러 이외에 "예외"라고 부르는 오류가 있다. 의도하지 않은 대로 프로그램을 쓰다가 뻗는 경우를 의미한다. 하지만 예외처리를 해준다면 에러와 다르게 프로그램을 계속 실행하는 상태로 유지하는게 가능하다. 예외에는 두가지가 존재한다. 1.일반 예외(Exception : 컴파일러가 예외 처리 코드 여부를 검사하는 예외다.) -> IDE를 사용해서 코드를 실행하기 전에 밑에 빨간줄이 끄이면서 왜 오류가 뜨는지 나타나는 경우다. 몰랐는데 이것도 예외 클래스에서 해주는 거였구나.. 2.실행 예외(Runtime Exceptio..
Null safety Nullable types and non-nullable types 출처 : 코틀린 공식문서 https://kotlinlang.org/docs/null-safety.html#collections-of-a-nullable-type (null 이 가능한 타입과 불가능한 타입) null 이 가능한 타입에 접근하는 방법 ? 연산자 사용 ?. 연산자 사용 코틀린타입의 목적은 객체가 null 이 된는 것을 방지하는 것을 목적으로 하고 있다. (The Billion Dollar Mistake 이 아저씨가 말한대로 말이다.) 자바를 포함해서 수많은 프로그래밍언어에서 위험한 내용은 null인 객체의 멤버에 접근하는 것이고 이는 객체 null 예외를 발생시킨다. 자바에서는 NullPointerException 과 같고 줄..
Coroutine2 코루틴에 관해서는 공부해야할게 꽤 많은 것 같아서 공부내용이 추가되는대로 계속 글을 쓰고 나중에 한번에 몰아서 정리를 해야겠다. 코루틴은 경량 쓰레드라고도 불림. 그 이유는? -> 쓰레드당 하나의 명령만 실행된다. 쓰레드 보다 생성비용이 가볍고 빠르다. 근데 코루틴이 contextSwithing 을 계속 해서 상황에 따라서는 쓰는게 오히려 손해일수도 있다. 코루틴을 만드는 방법은 세가지가 있다. 1. CoroutineScope.async() 를 활용하는 방법 -코루틴 내에서 예외가 발생할 수 있기 때문에 이 메소드는 Deffered 를 리턴한다. 리턴값이 존재한다. 2.CoroutineScope.launch() 를 활용하는 방법 -결과를 반환하지 않고 실행하거나 취소할 수 있는 객체인 Job을 리턴해준다..
Debug coroutines using IntelliJ IDEA – tutorial (IntlliJ IDEA를 활용해서 코루틴을 디버깅 하는 방법) 코루틴에서 디버깅 하는 방법에 관해서 알아 볼것이다. 공식문서를 참조했다. https://kotlinlang.org/docs/debug-coroutines-with-idea.html#create-coroutines import kotlinx.coroutines.* // 코루틴을 감싸기 위해서 runBlocking() 을 사용. fun main() = runBlocking { // 지연된 코루틴 값을 설정하기 위해서 async 예약어를 사용해서 변수 a와 b를 설정. val a = async{ println("I'm computing part of the answer") 6 } val b = async{ println("I'm computing another part of the answer") 7 } /..