들어가기 전에 컴포즈 Codelab 기초 따라하기 - 1 후속편입니다. https://seonghoonc.tistory.com/44 본 글은 Jetpack Compose Codelab basics 의 상태 호이스팅 이후를 다루고 있습니다. https://developer.android.com/codelabs/jetpack-compose-basics?hl=ko#7 상태 호이스팅 여러 컴포저블 함수가 읽거나 수정하는 상태는 공통된 상위 항목에 위치해야한다. 이를 상태 호이스팅이라고 한다. 호이스팅은 들어올린다 or 끌어올린다라는 의미라고 한다. 상태를 호이스팅의 장점 - 상태 중복 및 버그 발생을 방지할 수 있다. - 컴포저블을 재사용할 수 있다. - 쉽게 테스트할 수 있다. 그러나 상위 요소에서 제어할 필..
전체 글
Jetpack Compose 를 시작하면서 코드랩을 따라하면서 작성한 글입니다. 파란색 글씨는 개인적인 생각입니다. https://developer.android.com/codelabs/jetpack-compose-basics?hl=ko#0 Compose 시작하기 Composable function 은 @Composable 어노테이션이 달린 함수이다. 그럼 이 함수 내부에서 다른 @Composable 함수를 호출할 수 있다. Text 는 라이브러리에서 제공하는 컴포저블 함수이다. 이 함수를 내부에서 호출한 Greeting 은 컴포저블 어노테이션이 붙은 컴포저블 함수인 것이다. Greeting 함수는 name 문자열을 출력한다. Compose 를 사용해도 Activity 가 Android 앱의 진입점으로 ..
드디어 올 것이 왔구나 시간이 갈수록 자격 요건 or 우대 사항으로 Compose 를 요구하고 있다. 컴포즈..필수로 해야하는가? 고민하다가 왜 컴포즈를 사용해야하는지 정리해보기로 했다. XML 의 문제점 지금까지 Android View 계층 구조는 UI 위젯의 트리로 표시할 수 있었다. 앱의 상태가 변경되면 현재 데이터를 표시하기 위해 UI 계층 구조를 업데이트 해야했다. 가장 일반적인 방법은 findViewById() 로 트리를 탐색하고 button.setText(String), 과 같은 메서드를 호출하여 노드를 변경하는 것이다. 그러나 뷰를 수동으로 조작하면 오류가 발생할 가능성이 커진다. 데이터를 여러 위치에서 렌더링한다면 데이터를 표시하는 부분이 예기치 않은 방식으로 동작할 가능성이 있다. 업데..
Devfest Busan 2023 에서 발표한 내용을 바탕으로 작성된 글입니다. 우아한테크코스에서 함께 성장한 내용을 다루고 있습니다. 성장, 혼자 하기 힘들지 않나요? 혼자 개발했을 때 정말 막막했습니다. 내가 하고 있는게 맞는 건지.. 다음에 뭘 해야하는지 몰랐습니다. 그러나 우테코에서 함께 성장하면서 이 막막함을 떨쳐낼 수 있었습니다. 어떻게 함께 성장할 수 있었는지 경험을 소개해보겠습니다. 처음 함께 성장하기 키워드는 페어프로그래밍 입니다. 페어 프로그래밍 레벨 1, 레벨 2 미션의 모든 시작은 페어 프로그래밍이었습니다. 랜덤으로 매칭된 페어와 3일정도 함께 프로그래밍합니다. 페어 프로그래밍이란? - 두 명에서 짝을 이루어 개발한다. - 드라이버, 네비게이터 역할을 10분 정도 간격 번갈아가며 수..
Handling Scrolls with CoordinatorLayout 글을 보고 적용했습니다. https://guides.codepath.com/android/handling-scrolls-with-coordinatorlayout CoordinatorLayout 이란? CoorinatorLayout 은 구글의 Material Design scrolling effect 를 다루는 능력을 향상시켜준다. 커스텀 애니메이션 코드를 작성하지 않고도 많은 방법을 제공한다. - Snakbar 가 생길 때 Floating Action Button 이 올라갔다 내려갔다 하게 만들 수 있다. - 메인 컨텐츠를 위해 Toobar 나 header space 를 확장하거나 축소할 수도 있다. - 확장 혹은 축소시키고 뷰의 비..
오늘은 Festago 출시 후 앱에 crash 가 발생한 첫 번째 사례와 해결한 방법에 대해 써보겠습니다. 문제 발생 과정 개발 과정에서는 문제가 생기지 않았고 처음 설치했을 때도 문제가 발생하지 않았다. 첫 출시에 감격하고 있었는데.. 곧바로 문제가 발생했다. 앱을 삭제했다가 다시 설치하면 무조건 crash 가 발생하는 것이다! 전혀 예상치 못한 오류에 어디서 문제가 발생한건지 왜 두 번 설치해야 문제가 발생하는 것인지 고민하다가 프로젝트에 적용한 Firebase Crashlytics Log를 확인해보았다. AuthLocalDataSource 의 SharedPreferences 에서 오류가 발생한 것이었다. 오류 메세지는 다음과 같았다. Caused by android.security.KeyStoreE..
이 글은 Kotlin Coroutines : Deep Dive 책 내용을 다루고 있습니다. 들어가기 전에 공식문서나 책을 읽다보면 이런 얘기가 많이 나온다. List, Set 과 같은 컬렉션은 Hot, Sequence 와 자바의 Stream 은 Cold 이다. Channel 은 Hot 이지만 Flow, RxJava 스트림(observable, Single) 은 Cold 이다. 도대체 뭐가 뜨겁고 뭐가 차가운걸까..? 오늘은 데이터 소스의 두 가지 종류 Hot 데이터 스트림과 Cold 데이터 스트림의 차이를 확실히 이해해보자. Hot vs Cold Hot 데이터 스트림은 열정적이라 데이터를 소비하는 것과 무관하게 원소를 생성한다. Cold 데이터 스트림은 게을러서 요청이 있을 때만 작업을 수행하며 아무것도..
이 글은 Kotlin Coroutines : Deep Dive 책 내용을 다루고 있습니다. 자동차를 탈 때 내부 구조를 알 필요는 없다. 다만 이해도를 높여줄 수 있다. 한 번에 이해하기에 내용이 어려워서 그냥 이런게 있구나 하고 가볍게 넘어가려고 한다. 들어가기 전에 이 책에서는 코루틴 실제 구현에 대해 다음과 같이 중요한 점을 얘기한다. 중단 함수(suspend function)가 시작할 때, 호출되었을 때, 상태를 가진다는 점에서 상태 머신과 비슷하다. Continuation 객체는 상태를 나타내는 숫자와 로컬 데이터를 가진다. 함수의 Continuation 객체가 이 함수를 부르는 다른 함수의 Continuation 객체를 장식(decorate)한다. 그 결과 모든 Continuation 객체는 ..
그동안 당연하게 써 온 Repository 패턴인데 이론적으로 잘못 이해하고 있었다. 추상화해서 갈아끼우기 좋은 구조로 만들고 계층간 분리하는 것까지 Repository 패턴인 줄 알았는데 아니었다. 따라서 오늘은 안드로이드 공식문서에서 말하는 Repository 패턴에 대해서 확실히 알고 넘어가자. Repository 저장소 패턴은 데이터 레이어를 앱의 나머지 부분에서 분리하는 디자인 패턴 이다. 데이터 레이어는 UI 와는 별도로 앱의 데이터와 비즈니스 로직을 처리하는 부분이다. Repository 는 앱의 나머지 layer 에서 이 데이터에 액세스할 수 있도록 일관된 API를 노출한다. 데이터 레이어에는 네트워킹 코드, Room 데이터베이스, 오류 처리, 데이터를 읽거나 조작하는 코드 등이 포함. 즉..
테스트, 아키텍처, 다 중요하지만 간과하는 부분이 있었다. 안드로이드 개발자라면 요구사항에 맞는 View 를 마음껏 그려내고 지연을 줄여 최적화 할 수 있어야한다. 오늘은 뷰가 그려지는 과정에 대해 이해해보자. View Lifecycle https://proandroiddev.com/the-life-cycle-of-a-view-in-android-6a2c4665b95e https://medium.com/android-deep-dive-study/introduce-android-ui-rendering-principle-and-view-optimization-1-f593820c7a50 Custom View 를 만들다보면 View Lifecycle 를 마주할 때가 있다. View Lifecycle 에 대해 알..