목록안드로이드 (27)
성장기록지
부스트캠프 팀원과 함께 학습하며 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..

Context?애플리케이션 환경의 전역 정보 인터페이스이다.애플리케이션별 리소스 및 클래스에 접근하거나, 여러 활동에 필요한 작업에 대한 API를 제공한다 Activity Context와 Application Context가 있다. Activity Context액티비티 라이프사이클과 연결되어있다.Application Context앱의 시작부터 종료까지 살아있는 Context이다.항상 사용 할 수는 없다. ex) 다이얼로그는 activity Context로만 접근가능하다 어떤 컨택스트를 사용해야할까? 연관되어있는 가까운 컨택스트를 사용하는것이 안전하다.관련되지 않은 컨택스트 사용 시 앱 크래시로도 이어질 수 있다 . Activity Context를 사용하지 못하는 예시ViewModel에서는 사용하면 안..

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: ..

android:exported란? 공식문서에는 다음과 같이 적혀져 있다.다른 애플리케이션에서 안드로이드 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버)를 실행할 수 있는지에 대한 설정을 하는 역할을 한다. true인 경우, 모든 앱이 활동에 액세스 할 수 있으며, 정확한 클래스 이름으로 시작할 수 있다.false인 경우, 동일한 애플리케이션, 동일한 사용자 ID를 가진 애플리케이션, 권한이 있는 시스템 구성요소에 의해서만 접근이 가능하다. true로 하였을때의 위험성exported가 true로 되어있는건 취약한 activity로 외부에서 공격이 가능하다는 것이다.실제로 예시로 액티비티를 실행시키는 과정을 블로그에서 보여준다. 따라서 android:exported = true 로 하게 될 경우는 아래..

DiffUtil이란 androidx 패키지에 포함되어 두 리스트 간의 차이를 계산하고, 새로운 리스트로 변경하기 위한 작업목록을 반영하는 것에 도움을 주는 유틸리티 클래스이다. DiffUtil을 쓰지 않았을 때개인 프로젝트에서 RecyclerView.Adapter 의 list를 update할 때 다음과 같이 진행하였다.코드와 같이 아이템을 추가할 때, 전체를 새로고침하는 notifyDataSetChanged()를 사용하거나.아니면 최적화를 위해 범위 내에서만 아이템을 삽입하는 notifyItemRangeInserted()를 사용할 수 있다.class HomeShoppingItemAdapter : RecyclerView.Adapter() { private val items = mutableList..

StateFlow의 개념 StateFlow는 SharedFlow의 구체화 버전이다.(상속 받음)구독자가 생기면 값을 발행하지만, 구독자가 사라져도 최신 값을 메모리에 유지한다. (hot Stream)여러 구독자에게 최신 값을 발행할 수 있다. (hot Stream) StateFlow는 1의 고정된 replayCache값을 가진다. (한가지 값만 가지고 있을 수 있다는 뜻) StateFlow를 왜 사용하는가 (LiveData와 비교)우선 우리는 LiveData에 대해 살펴 볼 필요가 있다.기존에 viewModel에서는 주로 LiveData를 통해 값을 갖고있도록 하였다.왜냐면 Observable한 데이터 홀더 클래스인 LiveData는 다음과 같은 장점이 있기 때문이다.LiveData는 Activity, ..