목록2025/02 (7)
성장기록지

부스트캠프에서 진행한 프로젝트를 리팩토링하며 네트워크 연결이 끊어졌을 시 체크를 하는 네트워크 체커를 적용하고자 하였다.기능을 구현하면서 공식문서 및 자료들을 통해 학습한 내용을 정리하고자 한다. ConnectivityManager안드로이드에는 ConnectivityManager라는 클래스가 있다.공식문서에는 다음과 같이 설명되어 있다. 네트워크 연결 상태에 대한 쿼리에 응답하는 클래스. 또한 네트워크 연결이 변경되면 애플리케이션에 알림.이 클래스의 주요 임무는 다음과 같다.네트워크 연결(Wi-Fi, GPRS, UMTS 등) 모니터링네트워크 연결이 변경되면 브로드캐스트 인텐트 전송네트워크 연결이 끊어지면 다른 네트워크로 '장애 조치' 시도애플리케이션이 사용 가능한 네트워크의 거시적 또는 세분화된 상태를 ..

GlideGlide란, Android에서 추천하는 이미지 로드 라이브러리이다. 보다 쉽게 이미지를 로드 하고 더 나아가서는 이미지 캐싱 까지 해주는 편리한 라이브러리이다. 기본 사용법fun ImageView.setImage(url: String) { Glide.with(this) .load(url) .into(this)}기본 사용법은 매우 간단하다.with 에 Context 또는 View를 지정한다.load 에 불러올 이미지를 지정한다.마지막에 into 에 불러온 이미지를 넣을 ImageView를 지정하면 끝이다. Glide에서 제공하는 함수들Glide는 단순히 이미지를 로드할 뿐만 아니라 여러가지 처리를 위한 함수들을 제공한다.fun ImageView.glide(url: ..

개요검색화면 activity를 분리하며 코드를 작성하다 activity가 화면에 그려지지 않고. 로그를 찍어봐도 아무것도 찍히지 않는 현상을 맞이했다.이유를 찾아보니 override fun onCreate(savedInstanceState: Bundle?)위의 코드를 사용하지 않고override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?)아래의 코드로 작성해서 벌어진 일이였다.그렇다면 왜 화면에 그려지지 않는지, PersistableBundle이 뭔지 알아보고자 한다. PersistableBundle이란?공식문서에서는 다음과 같이 설명한다.문자열 키에서 다양한 유형의 값으로의 매핑.이 클래스에서 지원하는 유..

이전 글에서 Room 아키텍처에 따라 Entity, Dao, Database를 구성하는 과정을 서술하였다.이번 글에선 어떻게 기능들을 구현하였는지 과정을 작성하도록 하겠다.저번 글은 아래 링크에서 참고 가능하다.https://codinghun.tistory.com/76 Room을 활용한 쇼핑 상품 북마크 기능(Room 구조 구현)쇼핑앱을 구현하며 Room을 통해 로컬 데이터베이스에 상품을 저장하는 기능을 구현하고자 하였다.이전에 공부한 Room의 구조들을 활용하며, MVVM 구조를 깨지 않도록 구현한 과정을 작성하고자 한codinghun.tistory.com 북마크 된 상품 리사이클러뷰에 표시하기 viewmodel에 StateFlow>으로 bookmarkedItems를 구성해둔다.private val _..
쇼핑앱을 구현하며 Room을 통해 로컬 데이터베이스에 상품을 저장하는 기능을 구현하고자 하였다.이전에 공부한 Room의 구조들을 활용하며, MVVM 구조를 깨지 않도록 구현한 과정을 작성하고자 한다. 이전에 내가 학습한 글을 통해 프로젝트 내에 Room의 아키텍쳐대로 구성하고자 하였다.https://codinghun.tistory.com/23 Entity 구성 Entity는 아래와 같이 구성하였다.api호출 결과로 ItemsResponse를 가져오고, 거기서 각 검색 상품마다의 정보를 Item으로 가져왔다.앱 내에서 ShoppingItem만을 사용하므로 Item의 확장함수를 통해 아래 코드와 같이 toShoppingItem으로 Entity로 전환해주도록 하였다.PrimaryKey인 id는 상품의 고유값인..

Room TypeConverter란?안드로이드 로컬 데이터베이스인 Room 같은 경우 컬럼에 List나 Data class를 사용하려 하면 에러가 발생하게 된다.기본적으로 Room은 원시타입(int, short, long ....)과 wrapping 타입만 지원함.이때 Type Converter를 적용하면 에러를 발생시키지 않고 정보를 담을 수 있다. 객체 참조를 허용하지 않는 이유 서버에서는 데이터베이스의 관계를 객체 모델로 매핑하고 지연 로딩(lazy loading)을 사용해도 괜찮다.하지만 안드로이드 앱의 UI 스레드에서는 이런 방식이 문제가 된다.(지연 로딩이란? -> 필요한 순간까지 데이터 로딩을 미루는 방식으로 데이터베이스에서 데이터를 불러올 때 사용하는 전략)UI 스레드는 화면을 그리는데 약..

debounce란?debounce는 이벤트를 그룹화하고 일정 시간동안 이벤트가 발생하지 않으면 가장 마지막 이벤트를 전달한다.'penguin' 이란 단어를 검색한다고 해보자.p -> pe -> pen -> peng -> pengu -> penguin 과 같이 한글자씩 작성하게 될 것이다.별 다른 조치를 하지 않는다면 글자를 쓸때마다 이벤트가 전달되겠지만,Debounce로 일정 시간을 지정해주면 그 시간 동안 이벤트가 발생하지 않을 경우 가장 마지막 이벤트를 전달하게 해준다. 예를 들어 debounce를 0.5초로 설정해주고, penguin이라는 단어에서 한글자 작성하는데 0.3초씩 걸린다면,penguin 단어를 완성 후 0.5초 이후에 이벤트가 전달이 된다. 그림으로 본다면 다음과 같다. 1 ~ 5번의..