전체 글 (15) 썸네일형 리스트형 [Jetpack Compose] Donut-hole Skipping을 통한 최적화 Defer Read(지연 읽기)지연 읽기라는 개념은 Compose에만 국한되지는 않는다. 다만, Compose에서 불필요한 Recomposition을 최적화하기 위한 방법으로 활용할 수 있다. 이를 이해하기 위해서는 몇 가지 사전 개념에 대한 이해가 필요하다.Recomposition의 범위상태가 변하면 Recomposition이 일어나면서 UI를 다시 그린다. Composable은 UI 트리 형태로 그려지기 때문에 상태가 변경되면 그 중 가장 가까운(바로 상위의) Composable Scope만 invalidation이 일어난다. 다음 코드를 보자. 매우 흔하게 사용되는 패턴으로 ViewModel에서 state를 결정하고 Screen에서 구독하고 있는 형태이다. 이 상태에서 uiState의 값이 변하면 .. [Jetpack Compose] Compose 수명 주기 Composable 수명 주기컴포저블의 수명 주기는 컴포지션 시작, 0회 이상 재구성 및 컴포지션 종료로 이루어진다.1. Composition 생성(Initial Composition)초기에 생성된 컴포지션을 수정할 수 있는 유일한 방법은 리컴포지션을 통하는 것이다. 처음으로 Composable 함수가 실행될 때 발생하는 단계로, 이 때 Compose는 Composable 트리(UI 트리)를 구성하고, 내부적으로 상태나 recomposition을 추적할 수 있는 객체들을 설정한다.2. Recomposition(재구성)Compose는 변경된 값에만 반응해서 필요한 부분만 다시 실행하며 UI를 업데이트하기 때문에 매우 효율적이다. UI에 영향을 미치는 상태 값이 변경될 경우 발생한다. 따라서 변경이 필요한.. [CS, Android] 앱은 어떻게 만들어질까? 서론안드로이드 스튜디오에서 실행 버튼을 누르면 내부적으로 어떤 동작이 일어나는 걸까? '빌드 전달 부탁드려요', '빌드가 아직 안나왔어요' 관용적으로 표현하는 빌드는 도대체 무엇일까?고급 언어와 저급 언어흔히 우리가 코드를 작성할 때 사용하는 프로그래밍 언어인 Kotlin, Java, C, Python과 같이 사람이 쉽게 이해하고 작성하기 위해 만든 언어를 고급 언어(high-level programming language)라고 한다. 하지만 컴퓨터는 저급 언어(low-level programming language)만을 직접 이해하고 실행할 수 있다. 따라서 고급 언어로 작성된 소스 코드가 실행되기 위해서는 반드시 저급 언어로 변환하는 과정이 필요하다. 저급 언어에는 기계어와 어셈블리어가 있고 기계어는.. 왜 CS를 공부해야하는가? 견해컴퓨터 공학 지식이 안드로이드 개발자로서 실무에 직접적으로 사용되는 경우는 많지 않다. 따라서 CS에 대한 지식이 깊지 않아도 당장 주어진 요구사항을 구현하고 코드를 해석하는 데에는 문제가 되지 않는다. 하지만 최근 들어 다음과 같은 고민들이 생겼다. 첫째로 문제 상황을 마주했을 때 익숙한 해결 방식으로만 해결하려 한다는 것, 그로 인해 시야가 한정되는 느낌이 들어 성장이 멈춘 느낌이다. 결국 우리가 사용하고 있는 기술의 로우레벨로 가면 갈수록 CS와 밀접해지기 때문에 CS를 공부하면 시야를 넓히고 새로운 인사이트를 얻을 수 있다고 생각한다. 둘째로 CS 기초가 허술하다보니 안드로이드 프레임워크를 다루는 것 외에는 미지의 영역과 같이 보인다는 것이다. 결국 안드로이드 개발을 하는 것은 구글에서 잘 추.. [CS, Android] 해시테이블 / HashMap, ArrayMap, SparseArray 서론어떤 콜백 함수가 값을 넘겨줄 때 SparseArray 타입으로 넘겨주는 것을 보고 SparseArray가 무엇이고 언제 사용해야 하는지에 대해 정리해보고자 한다. SparseArray에 대해 이해하는 과정에서 HashMap과 ArrayMap는 필수적으로 선행되어야 함을 알게 되었고, 이 과정에서 자료구조와 알고리즘에 해당하는 Map과 해시테이블에 대한 이해가 기반이 되어야 하기에 카테고리를 CS로 정하게 되었다. 최근 들어 안드로이드 개발에 있어 CS적 관점에 대해 많이 고민하고 있어서 흥미롭게 공부할 수 있었다.맵(Map) 맵은 키(Key)-값(Value) 쌍을 하나의 데이터로 보고 이 쌍들을 저장하는 자료구조로 정의한다. 위 사진과 같이 키 234에는 Banana라는 값을 가지게 되고 키 382.. [Android] 구글 권장 아키텍쳐와 클린 아키텍쳐 서론프로젝트에 신규 피쳐가 추가될 때마다 설계를 고민하게 되면서 자연스럽게 아키텍쳐에 대한 고민도 함께 하게 된다. 현재 회사 프로젝트의 전반적인 아키텍쳐는 구글 권장 아키텍쳐이다. 하지만 최근 맡게 된 피쳐의 모듈은 클린 아키텍쳐로 구성하는 경험을 하게 되었는데, 각 아키텍쳐를 경험해보았을 때 주관적인 견해를 기록해보려고 한다.안드로이드 권장 아키텍쳐친절하게도 구글은 안드로이드를 개발할 때 이런 아키텍쳐를 쓰길 바란다며 공식문서에 상세하게 나와있다. 물론 개발 요구사항이나 프로젝트의 규모에 따라 이를 수정할 수도 있다. 아키텍쳐는 말 그대로 하나의 건축 양식을 정하는 것일 뿐, 정답은 없다고 생각한다. 아래 그림을 통해 구글 권장 아키텍쳐에 대해 핵심적인 부분을 살펴볼 수 있다. 구글 권장 아키텍쳐는 .. [Kotlin] inline 키워드 서론 Kotlin의 inline 키워드에 대해서는 간혹 보기만 하고 나중에 공부해야지 하고 넘겼던 것 같습니다. 이번에 람다를 공부하면서 inline 키워드에 대해 언급되는 내용이 있어 확실하게 공부하고 넘어가려고 합니다. inline 아래와 같은 코드가 있습니다. someMethod() 라는 함수는 doSomething이라는 함수를 받아 인자로 넘겨주고 있습니다. 이를 Java 코드로 디컴파일하면 어떻게 될까요? fun someMethod(doSomething: () -> Unit) { doSomething() } fun main() { someMethod { println("Hello World") } } 다음과 같이 someMethod() 함수 안에서 인자로 받은 doSomething 함수에 대한 .. [Jetpack Compose] UI State 저장 방법에 대하여 서론 Compose에서는 State를 이용해 상태를 추적하고 관리합니다. 이로 인해 recomposition 여부가 결정되며 사용자에게 보여지는 화면의 UI가 결정되기도 합니다. 요구사항에 맞춰 구현을 하다보니 A Screen에서 B Screen으로 이동했다가 다시 A Screen으로 이동했을 때 State가 유지되어야 하는 경우가 발생해 Compose에서 UI State를 저장하는 방식에 대해 알아보려고 합니다. rememberSaveable rememerSaveable은 UI State를 Bundle에 저장합니다. Bundle은 String 타입을 key로 가지는 Map 형태의 데이터 묶음인데, 안드로이드에서 상태의 저장 및 복구에 사용됩니다. 기본적으로 key에 대응하는 value 값으로 int, .. 이전 1 2 다음