목록분류 전체보기 (56)
성장기록지
부스트캠프 팀원과 함께 학습하며 Stability를 기존보다 더 자세히 학습 할 수 있었다.새로 학습하는 분들에게 도움이 되고자 정리하여 글을 작성한다.노션이 더 편하신 분들은 노션에 정리된 글을 읽으면 좋다 https://www.notion.so/Compose-Stability-2a1909469f964608b8e93e7eaca400e1Jetpack Compose의 3단계Composition(구성) : Composable 함수를 실행하여 UI 트리를 생성하고, 상태를 저장 및 관리한다.@Composable 함수가 실행되어 UI 트리를 생성상태를 관리하기 위해 여러 메모리 슬롯을 할당하며, remember와 같은 메커니즘을 통해 상태를 저장하고, 상태 변경 시 기존 값을 활용하여 해당 부분만 Recompo..

안드로이드의 이미지 라이브러리에 자주 활용되는 LRU Cache에 대해 자세히 알아보고자 한다.일반적인 알고리즘 개념부터 코틀린에서 어떻게 구현되어있는지까지 살펴보자.LRU 알고리즘의 개념가장 오랫동안 사용되지 않은 데이터를 우선적으로 제거하는 방식이다. (Least Recently Used Algorithm) 정해진 capacity 안에서 최근에 사용되어진 데이터를 가장 앞에 보내고, capacity가 꽉 찼을 때 새로운 값이 들어온다면가장 오랜기간 사용되지 않은 데이터를 삭제하고 새로운 값을 넣는 방식이다.아래 그림과 같이 테이블 안에 있는 값이 get이나 put이 되면 최상단으로 불러오게 하고,테이블이 꽉 찼을 때 새로운 값이 들어온다면 가장 오래된 값을 제거하는 모습을 볼 수 있다. (Fig 7..

MVP 패턴이전에 설명한 MVC 패턴에서 Controller를 Presenter로 교체한 것이다. 흐름은 다음과 같다.1. User가 Input을 준다.2. View는 Presenter에게 Event를 전달한다.3. Presenter는 Model을 조작하고, 데이터 값을 받아온다.4.Presenter는 VIew에게 응답을 알려준다.(Notify)5. View를 통해 ui로 표시하게 된다.Android에서 MVP 패턴 적용하기 (예제)아래와 같이 Contract Interface 안에 View와 Presenter 인터페이스를 만들 수 있다. 사진과 같이 상속을 받아서 내부에서 구체적으로 구현을 하게 된다.아래 버튼은 클릭시 Presenter에게 이벤트를 알려주게 되는 예시 MVP 패턴 적용시 장,단점장점역..

MVC의 의미란?MVC 는 Model, View, Controller의 약자이다. 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.왜 MVC가 탄생하게 되었을까 ?과거의 프로그래머들은 코드가 많아질수록 복잡해져서 코드 파악도 힘들어지고, 수정 할 때마다 많은 코드를갈아엎어야 했다 -> 유지보수가 힘들었다.그러다가 프로그래머들이 코드를 짜면서 특정 패턴대로 코드를 짜면유지보수가 편한것을 찾아내고, 그 패턴을 하나의 공식처럼 만든것이다. 요약하자면 MVC는 유지보수가 편해지는 코드 구성 방식이다. MVC 패턴 예시 사용자가 구글에 검색어를 입력하면,Controller를 통해 Model에 검색 결과를 달라고 요청한다. 검색 결과를 받은 Controller는 View에게..

부스트캠프에서 진행한 프로젝트를 리팩토링하며 네트워크 연결이 끊어졌을 시 체크를 하는 네트워크 체커를 적용하고자 하였다.기능을 구현하면서 공식문서 및 자료들을 통해 학습한 내용을 정리하고자 한다. 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 스레드는 화면을 그리는데 약..