Android 15

[Android] LiveData란 (vs StateFlow)

LiveData 란? 관찰 가능(observing)한 데이터 홀더 객체로,Activity, Fragment, Service 등의 앱 구성요소의 수명 주기(LifecycleOwner)를 인식한다. 그리고 수명 주기 인식을 통해 "활동 수명 주기 상태"에 있는 앱 구성요소 관찰자(observer)만 업데이트가 가능하다. LiveData의 이점관찰자(Observer) 패턴LiveData는 데이터가 변경될 때 Observer 객체에게 알리며, 이러한 관찰자 패턴으로 데이터가 변경될 때마다 UI를 자동으로 업데이트시킬 수 있다.생애 주기 인식LiveData의 Observer는 Lifecycle 객체와 결합되어 있어 연결된 생명주기가 종료되면 자동으로 삭제된다.관찰자 수명주기가 비활성화 상태(backstack 등..

Android/학습 2025.07.19

[Kotlin] Coroutine Flow란, 그리고 Flow, StateFlow, SharedFlow..

Coroutine Flow란?Flow는 Kotlin Coroutne 기반의 비동기 데이터 스트림 처리 도구이다. 데이터 스트림은 시간 흐름에 따라 연속적으로 발생하는 데이터를 순차적으로 처리하는 개념인데, Java의 Stream과 비슷한 개념이라고 생각하면 된다.Kotlin(함수형 언어)을 자주 사용하는 입장에서는 사실 익숙한 개념이다. Java의 Stream에 대한 간단한 예시List numbers = Arrays.asList(1, 2, 3, 4, 5);numbers.stream() .filter(n -> n % 2 == 0) // 짝수 필터링 .map(n -> n * n) // 제곱 .forEach(System.out::pr..

Android/학습 2025.07.06

[CS] 동기 vs 비동기, 블로킹 vs 논블로킹, 그리고..

개발을 하면서 동기는 시점을 맞추고 비동기는 발생 시점과는 상관없이 실행시켜 놓는 느낌이고블락은 실행시킨 작업이 끝날 때까지 아무 작업도 하지 못하고 넌블락은 실행시킨 작업과 상관없이 제 할 일을 한다. 이런 식으로 대충 느낌만을 알고 용어를 쓰다 보니, 막상 비동기와 넌블락의 명확한 구분이라던지 동기-논블럭, 비동기-블럭 같이 조금만 때려버리면 정신을 차리지 못해, 이번에 마음먹고 정리해 보려고 한다. 우선, 동기와 비동기에 대해 다루기 전블럭과 논블럭에 대해 먼저 다뤄보도록 하자. 블로킹(Blocking) vs 논블로킹(Non-Blocking)블로킹(Bolocking)쉽게 말하면, 작업이 완료될 때까지 다른 작업을 하지 못하고 기다 대기한다.I/O 관점에서 블로킹은 다른 작업을 실행(함수 호출 등)..

Android/학습 2025.06.14

[Android] RecyclerView의 동작 과정

RecyclerViewAdapterLayout Manager 목록 UI를 설계할 때 개발자로는 기본적으로 이 3가지 요소로 RecyclerView 목록을 구현하고는 하는데,오늘은 목록의 동작 과정에 대해 좀 더 자세히 알아보도록 하자. 다음은 Recyclerview의 주요 구성요소에 대한 간단한 설명이다.RecyclerViewitemView가 나열되어 있는 viewGroup(ViewHolder 패턴을 강제화, 컴포넌트 패턴)Layout Manager목록의 개별 요소(ItemView)를 올바른 위치에 배치(정렬)해주는 컴포넌트 개별 항목의 위치를 정하며 사용자에게 더 이상 보이지 않는 항목 뷰(View)를 재사용할 시점을 결정한다.레이아웃 매니저(Layout Manager)는 View를 재사용하기 위해 ..

Android/학습 2025.05.16

[Kotlin] Kotlin Coroutine with Dispatcher

코루틴 CoroutineAndroid에서 비동기적으로 실행되는 코드를 단순화하는 데 사용할 수 있는 동시성(concurrency) 디자인 패턴이다.  동시성(Concurrency) vs 병렬성(Parallelism) 병렬성은 실제로 두 작업이 같이 처리되는 것을 뜻하고 동시성을 그 와는 다르게 두 작업이 번갈아가면서 실행되며 동시에 처리되는 것을 뜻한다. 실제로 A작업, B작업이 같이 처리되는 것이 아니라 A작업했다가 B작업했다가 돌아가면서 처리하는 것이다.실제 한 시점을 보면 하나의 작업만 처리되는 것을 알 수 있다. 코루틴은 이 동시성에 대한 디자인 패턴(솔루션)인 것인데,코루틴이 병렬성이 아닌 동시성 디자인 패턴인 건에 대해서는 코루틴의 동작 방식에 대해 이해하면 쉽다.  코루틴은 주로 경량 스레드..

Android/학습 2025.04.09

[Android] Paging3의 PagingSource, PagingConfig와의 관계

목록형 UI를 구현할 때 개발자는 고려해야 할 것이 있다.만약 목록의 모든 데이터를 가져와 보여주려고 한다면 해당 페이지를 보여줄 때 엄청나게 많은 부하와 로딩 시간이 필요할 것이다. 그래서 개발자가 사용하는 기법은 사용자한테 보여주는 데이터 일부만을 가져와 부분 부분 보여주는 기법인데,컴퓨터에서 크롬과 같은 웹 페이지에서 1페이지 2페이지로 넘어가는 것과는 다르게 모바일에서는 폰을 그대로 스크롤하며 주르륵 뜨는 UX를 많이 경험했을 것이다. Paging 라이브러리는 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있고, 앱에서 네트워크 대역폭과 시스템 리소스를 모두 더 효율적으로 사용할 수 있도록 구현된 라이브러리이다.Paging 라이브러리의 이점은 다음과 같..

Android/학습 2025.03.29

[Android] Fragment Manager, Basic 편

일반적으로 운영 애플리케이션 담당 업무를 하게 되면,페이지 이동 같은 작업은 기존에 설계되어 있는 방식 따르면 되었기 때문에이 부분에 대해 신경을 잘 쓰지 않게 되었고, 따로 공부할 계기 및 우선순위가 계속 늦춰지고 있었다. 하지만, 처음부터 완벽하게 만들어지면 좋겠지만 그렇지 않은 경우는 늘 존재하고우리 프로젝트도 이 부분에 대한버그 픽스와 리펙토링이라는 큰 백로그가 만들어지게 되었다. 현재 프로젝트에서는 FragmentManager를 관리하여 페이지 이동을 담당하는 Object Class가 존재하였고 엄연히 Activity의 생명주기에 의존적일 수밖에 없는 FragmentManager를 Object로 어디서든 접근하여 안전장치 없이 사용되는 로직은 실제로 운영에서도 Exception을 많이 일으키고 ..

Android/학습 2025.02.16

[Kotlin] StringBuilder (String 메모리 저장 방식과 StringBuffer를 곁들인..)

StringBuilder는 변경가능한 문자열을 다루기 위한 객체인데,우선 StringBuilder에 대해 알아보기 전에, Kotlin에서 String의 메모리 저장 방식에 대해 알아보자. String은 참조형 객체로 Stack과 Heap 메모리를 이용하여 값을 가져온다.기본형 자료형이 Stack에 저장되는 것과 달리 Heap 메모리를 추가적으로 사용더보기참조형 객체는 변수에 객체에 실제 값을 저장하는 것이 아닌 값이 있는 주소값을 저장한다. 아차차, 참고적으로Kotlin은 모든 자료형이 참조형 자료형이다!! 그렇기 때문에 그림에서 num: Int도 사실 st1: String처럼 참조형으로 연결되어야 한다.차이를 비교하려고 저렇게 작성했으나 저 그림은 엄밀히 따지자면 맞지 않는 그림이다. Java의 int..

Android/학습 2024.12.12

[일상] 2025 안드로이드 탐구 영역 - 2025학년도 개발능력시험 문제지 안드로이드탐구 영역

며칠 기다리던 우편이 있었다.그것은 바로바로 2025학년도 개발능력시험 문제지안드로이드 탐구 영역  GDG Korea Android에서 진행한 활동으로 수능, 모의고사 컨셉의 이벤트!5,900원의 응시료를 제출하고 참여할 수 있었다. 아니, 말차라떼 한번 안 먹는 돈으로 이런 이벤트?! 바로 진행시켜!   사실 자취하고 있는 곳이 근린생활시설이라, 우편함이 호실마다 있지 않고 층마다 있다.그래서 호옥시 우편물을 잃어버릴까 봐 조마조마했다.(지금도 주인을 알아볼 수 없는 우편물이 폭발 직전으로 꽂혀있다) 그런데 다행히 우편이 아닌 안전하게 택배로 배달되었다! 야호! 문자 메시지까지 발송 구성품안내문/준수사항 (총 2장)안드로이드탐구 영역 문제지 경우에 따라 사은품도 동봉되어 있다고 한다.운이 좋은 참여자는..

Android 2024.12.08

[Android] ViewModel Instance 생성 with ViewModelProvider

ViewModel은 생성될 때 전달받은 ViewModelStoreOwner 생애주기를 따라간다. https://androidhelper.tistory.com/23 [Android] Jetpack ViewModelViewModel비즈니스 로직 또는 화면 수준 상태 홀더로,UI 컨트롤러의 데이터를 캡슐화하여 구성 변경이 일어나도 데이터를 유지하는 것이 목적인 구성요소이다. 즉, UI에 상태를 노출하고 관련 비즈androidhelper.tistory.com 그렇다면 ViewModelStoreOwner 생애주기를 따르는 ViewModel의 생성하려면,즉, ViewModel의 인스턴스는 어떻게 해야 올바르게 생성해서 사용할 수 있을까? ViewModelProvider를 사용하는 방법 ViewModelProvide..

Android/학습 2024.11.28