본문 바로가기

안드로이드

(10)
FireBaseStorageCleanArchitecutre 예제 FireBase에서 storage에 이미지를 등록하는 절차를 클린아키텍쳐적용한 예제입니다. 이 예제를 통해서 공부할 수 있는 기술들 1. AndroidCleanArchitecture 2.FireBase Storage 3.Hilt 4.typealias(쉬운 개념이니 따로 구글링하시는 것도 좋습니다!) 예제만 보시고 싶으신 분들은 아래 링크를 참조하시면 되고요. https://github.com/YunSeokVV/FireBaseStorageCleanArchitecutrePractice 주의 google-service.json 파일을 반드시 따로 추가해주셔야 합니다!! 각자 Firebase Console 로 가셔서 프로젝트를 생성하고 나면 확인이 가능해요! 주인장이 나름 중요하다고 생각한 부분의 내용을 보고싶..
Flow (안드로이드) Flow란? -kotlin에서 제공해주는 비동기 통신을 도와주는 기능이다. 안드로이드에서 자주 사용되고 보통 반응형 UI를 만드는데 자주 사용된다. 보통 서버에서 데이터를 받아오거나 로컬DB에서 데이터를 받아올때 많이 사용된다. Flow는 코루틴 위에서 동작하기 때문에 본인이 코루틴에 관해서 잘 모른다면 먼저 코루틴에 관해서 선행학습을 해야할 필요가 있다. Flow의 구성요소 Flow에는 세가지 구성요소가 있다. Producer : 번역하면 생산자인데, 보통 repository를 일컫는다. repository에는 서버나 로컬에서 받아온 데이터를 갖는 저장소를 의미한다. Flow가 코루틴 위에서 동작하기 덕분에 데이터를 비동기적으로 받아올 수 있다. Intermediary : 번역하면 중재자이다. 이 녀석..
Hilt를 이용한 ViewModel 객체 생성 Hilt를 사용해서 VIewModel 객체를 뷰(Activity)에서 생성한뒤 사용하는 방법에 관해서 알아보겠습니다. 글의 뒷부분에서 Hilt를 사용하지 않고 viewModel 객체를 생성해서 사용하는 방법도 서술하겠습니다. 우서 이 글의 주제가 Hilt를 이용한 ViewModel 객체의 생성이니 관련 내용을 서술하도록 하겠습니다. ps. 현재 혼자서 공부하고 있는 프로젝트에서 코드를 사용하고 있어서 주제와 조금 관련이 없는 코드들도 섞여 있을 수 있겠네요. Hilt를 이용한 ViewModel 객체 생성하는 방법 우선 Hilt를 사용하기 위해서는 Application에서 @HiltAndroidApp 어노테이션을 사용해줘야 합니다. -Hilt를 사용하는 모든 앱은 @HiltAndroidApp으로 주석이 지..
viewPager2 Indicator 예제 라이브러리를 사용하지 않았습니다. indicator를 쓰기 위한 상당히 간단한 예제입니다. 깃허브 링크 https://github.com/YunSeokVV/viewPager2IndicatorExample/tree/master GitHub - YunSeokVV/viewPager2IndicatorExample: viewPager2 에 indicator를 적용한 간단한 예제 viewPager2 에 indicator를 적용한 간단한 예제. Contribute to YunSeokVV/viewPager2IndicatorExample development by creating an account on GitHub. github.com 구현하는데 참고한 사이트 https://dharmeshbasapati.medium...
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) 메소드..
Handler, Looper 핸들러와 루퍼의 의미 뭐하는 애일까? 서브 스레드에서 UI 관련 작업을 할 수 있도록 도와주는 클래스다. 안드로이드에서 ui관련 작업은 메인스레드에서만 가능하다. 스레드간의 동시성 문제 때문에 ui관련 작업에 한해서는 그렇게 하기로 정했다. 서브스레드에는 TextView에서 '로딩중' 이라는 글자를 입력하려고 하고 메인 스레드에서는 '로딩 완료!' 라는 텍스트를 입력하려고 한다고 생각한다면 그냥 마지막에 실행되는 스레드가 뭐냐에 따라서 보여지는 결과가 다를 것이다. 이런 혼돈을 막고자 메인 스레드에서만 ui 관련 작업을 할 수 있도록 설정했다. 핸들러를 사용해서 메세지를 전송하고 Message를 처리할 수 있다. 토막상식 : 스레드끼리는 메세지를 통해서 의사소통을 한다. 워커 스레드가 메인 스레드에게 메세지를 던지면 이를 수..
Handler, Looper, Message Handler 뭐하는 애일까? 서브 스레드에서 UI 관련 작업을 할 수 있도록 도와주는 클래스다. 안드로이드에서 ui관련 작업은 메인스레드에서만 가능하다. 스레드간의 동시성 문제 때문에 ui관련 작업에 한해서는 그렇게 하기로 정했다. 서브스레드에는 TextView에서 '로딩중' 이라는 글자를 입력하려고 하고 메인 스레드에서는 '로딩 완료!' 라는 텍스트를 입력하려고 한다고 생각한다면 그냥 마지막에 실행되는 스레드가 뭐냐에 따라서 보여지는 결과가 다를 것이다. 이런 혼돈을 막고자 메인 스레드에서만 ui 관련 작업을 할 수 있도록 설정했다. 핸들러를 사용해서 메세지를 전송하고 Message를 처리할 수 있다. 토막상식 : 스레드끼리는 메세지를 통해서 의사소통을 한다. 워커 스레드가 메인 스레드에게 메세지를 ..