✅ 진행한 기능Navigation2에서 Navigation3로 마이그레이션Feature 모듈을 api / impl 구조로 리팩토링 💡문제 해결 과정 기록최근 회사 프로젝트 중 하나를 Navigation3로 Migration 과정을 진행했습니다. 아래 순서로 마이그레이션을 진행했습니다. 1. Route 정의 (data class → NavKey)우선 기존 Navigation2에서 백스택 및 Navigation State를 관리하던 navController 대신 rememberNavBackStack 로 변경했습니다. Navigation3에서는 List로 직접 백스택을 구현하는 방식도 가능했지만, rememberNavBackStack 은 Configuration Change나 Process Death와 같은..
전체 글
💥 Nav3에서 ViewModel이 재생성되지 않는다!?!?문제 정의Navigation2로 구현된 프로젝트를 Navigation3로 Migration 하는 과정에서, 기존에 정상 동작하던 화면 재생성 로직이 Navigation3에서 동일하게 동작하지 않는 문제가 발생했다. 프로젝트에는 다음과 같은 화면 흐름이 존재한다.A 화면 → B 화면 → C 화면으로 이동C 화면에서 A 화면으로 다시 복귀이때 A 화면은 C 화면에서 생성된 결과 데이터를 반영하여 UI를 갱신해야 한다.A 화면은 단순히 이전 상태로 복귀하는 것이 아니라, C 화면의 결과를 반영하기 위해 A 화면을 새로 생성하는 방식으로 설계되어 있었다. 기존 Navigation2 환경에서는 A 화면의 ViewModel이 재생성되며, 이 시점에 C 화..
몇 년 전 처음 안드로이드 공부를 시작했을 때는 블로그, 강의에서 LiveData를 쓰는 것을 많이 봤고, 저도 이런 예시들을 참고하여 프로젝트에서 LiveData를 자주 사용했습니다. ViewModel에서 LiveData를 만들고, Activity나 Fragment에서 Observe 하거나, Databinding을 하여 자동으로 UI를 갱신시켰습니다. 한동안 별 고민없이 LiveData를 사용했었지만, 어느 순간부터 블로그나 주변 코드들이 하나둘씩 Flow로 바뀌기 시작했습니다.부트캠프에서도 저는 LiveData를 썼었는데, 주변 캠퍼분들은 전부 Flow를 사용하고 있었습니다. 당시에는 저 또한 Flow를 따라 쓰기 시작했지만, 솔직히 말해서 왜 써야하는지, 어떤 장점이 있는지 정확히 이해한 상태는 아..
스타트업에 합류 과정2025년 1월 말, 운 좋게도 앱 개발자로서 첫 커리어를 시작할 수 있었다. 2023년, 대학생 3학년이던 시절 처음으로 앱을 만들고, 해커톤에 참여하여 장관상을 받으며 앱 개발이라는 세계에 발을 들였다.2024년에는 네이버 부스트캠프를 통해 더 넓은 세상을 경험했고, 조금씩 뛰기 시작하며 개발자로서 방향을 잡아갔다.그리고 2025년, 마침내 진짜 길 위에 올라섰다. 이제는 현실 속 문제를 기술로 풀며 한 걸음씩 나아가고 있다. 학부 시절에는 ‘카카오 트랙’ 프로그램을 통해 카카오 현직자 분들의 수업을 들을 수 있었고, 실제 카카오 본사에 출근해 프로젝트를 수행하는 현장실습도 경험했다.이러한 경험을 바탕으로 해커톤에 참여해 장관상을 수상하기도 했으며, 학점 또한 상위권을 꾸준히 유지..
코루틴은 아주 중요한 개념입니다.Android에서 비동기 작업할 때 사용하기에 몰라서는 안되는 친구입니다!!아직은 우리 코루틴과 친하지 않은 것 같아 친해지기 위하여 열심히 알아봤습니다...! 😇 코루틴Co(함께, 서로) + routine(규칙적인 일의 순서, 작업의 집합) 2개가 합쳐진 단어로 함께 동작하며 규칙이 있는 일의 순서를 뜻합니다. 다른 말로 하면 실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브루틴을 일반화한 컴퓨터 프로그래밍 구성요소입니다.보통 루틴은 일직선적인 흐름을 가지는데, 코루틴은 이 흐름을 중간에 suspend(지연) 했다가 resume(재시작)을 하는 것이 가능합니다. 코틀린에서는 suspend 라는 접두어를 붙이면 코루틴 즉, 중간에 멈출 수 있는 함수가 ..
Compose의 생명주기 컴포저블 수명 주기 | Jetpack Compose | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컴포저블 수명 주기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 컴포저블의 수명developer.android.com Jetpack Compose는 위 공식 문서에서 설명된 것처럼 특정한 생명주기를 따르고 있습니다.생명주기는 위 그림과 같이 세 단계로 구성됩니다. Enter the Composition : 컴포저블이 처음 실행되어 UI를 구성합니다.Recomposition : State 객체의 변경으로 인해 필요한 부분만 재 구성됩니다.Leave the Compo..
원래 계획은 2024년이 끝나기 전에 작성하고자 했지만... 연말을 너무 즐겁게 보낸 나머지 이제야 작성하게 됐습니다... 🥹첫 연말 회고! 2024년은 어땠을까?! 2024년 내가 한 활동들을 되돌아보자! 2024년은 대학교 졸업 후 맞이하는 첫 해였습니다.가장 큰 변화는 백수가 된 것! 그로 인해 넘쳐나는 시간!이 시간을 잘 보내는 것이 중요하다고 생각했습니다.그렇기에 2024년 1월에는 노션 페이지를 만들어 매 일상을 기록하는 것을 목표로 했습니다. 2024년의 일상 기록 2024년 | NotionToday’s Trackercatnip-opinion-e71.notion.site 2024년, 노션 페이지를 통해 나의 하루 하루를 기록했습니다. 연초에는 목표를 세우고, 하루를 마무리하며 일기장에 그..
프로젝트를 진행하던 중 리컴포지션 최적화 단계에서 겪었던 트러블 슈팅에 대해 작성하고자 합니다! 💥 상태를 by remember를 통해 호이스팅하여 관리했을 때 리컴포지션 문제 발생문제 정의 compose-samples/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/cart/Cart.kt at main · android/compose-samplesOfficial Jetpack Compose samples. Contribute to android/compose-samples development by creating an account on GitHub.github.com Compose-samples를 보며 얻은 인사이트 중 하나는 상태 호이스팅을 통..