Android 18

[Android] 딥링크(deeplink) - App Link

웹링크가 사용자를 특정 웹 사이트로 이동시키듯이, 딥링크는 사용자를 특정 앱으로 이동시켜서 원하는 화면을 보여주거나, 사용자 액션을 유도한다. URI 스킴 방식 (Custom Scheme)해당 방식은 가장 오래되고 널리 사용되는 딥링크 유형이며, Android/iOS 두 곳 모두에서 사용이 가능하다.앱에 해당 URI Scheme을 등록하여 사용할 수 있으며, Android에서는 다음과 같이 등록할 수 있다. AndroidManifest.xml 참고로 커스텀 스킴의 형식은 다음과 같이 앱 스킴, 호스트, 패스(Path), 파라미터로 구성되어 있다. 앱 스킴(App Scheme)은 이동하고 싶은 앱을 특정,패스(Path)는 앱에서 들어가고 싶은 페이지를 특정하는 역할을 수행한다...

Android/학습 2025.10.12

[Git] GitFlow(깃플로우), 기존 Git 명령어 관점에서

새로 이직한 회사에서 일반 Git이 아닌 Git-Flow라는 것을 권장 가이드라인으로 사용하고 있었다.Git Flow? 읭. 내 머릿속의 git flow는 브랜치 전략, 병합 규칙 같은 흐름도 같은 게 전부였기에gitflow 명령어와 기존 git 명령어의 차이점을 알아보기로 했다. git-flow는 git과 별개의 존재가 아닌,기존 git 명령어를 git-flow의 브랜치 전략을 자동화해 주는 트리거 같은 명령어 개념이다. git-flowGit 브랜치 전략을 자동화해 주는 도구Vincent Driessen의 Git Flow 모델을 따름 앞에서 말한 git-flow의 브랜치 전략, 병합 규칙 같은 흐름도가 맞았던 것이다. Gitflow 초기화$ git flow init -d해당 명령어를 통해 기본 설정..

Android/학습 2025.08.23

[Git] Git Merge 종류 (with. force push로 commit이 사라졌을 경우)

작업을 하거나 협업을 할 때 브랜치를 만들고 해당 브랜치를 Merge 한 경험은 다들 있을 것이다.회사에서 Feather 브랜치를 만들고 delvop 같은 브랜치에 merge 하여 자신이 한 작업물을 올리는 등의 각자 회사에서 따르고 있는 git flow가 있을 것이다. 이 부분에서 각자 팀에서 암묵적으로나 명시적으로 merge 규칙 등이 있을 텐데,한동안 생각 없이 규칙대로만 작업하다 보니 해당 개념을 좀 잡아보려, 이 Merge에 대해서 좀 더 알아보려고 한다. 우선 대표적인 3가지 Merge 방법에 대해 알아보고 좀 더 특이 케이스에 대해 보도록 하자.Merge (3-way-merge)Sqush and MergeRebase and Merge 우선 위 3가지 Merge 방법은 GitHub GUI에서 ..

Android/학습 2025.08.09

[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