분류 전체보기 (109) 썸네일형 리스트형 다시 읽는 Effective Kotlin - Item33. 생성자 대신 팩토리 함수를 사용하라 서론 필자는 그동안 앱을 개발하면서 팩토리 패턴을 굉장히 많이 사용해 왔습니다. 예컨대 다음같이 Hilt를 사용하지 않고 앱을 개발하던 시절 Retrofit -> DataSource -> Repository까지의 필요한 인스턴스들을 Repository Interface에서 팩토리 패턴을 사용함으로써 View에서 Data Layer 방향으로의 직접적인 의존성을 끊을 수 있었습니다.interface PlaceRepository { companion object{ fun create(): PlaceRepository{ return PlaceRepositoryImpl( PlaceDataSource( Retrofit.. Compose LocalCollectAsStateCoroutineContext Dove Letter의 25년 2월 3일 아카이빙 된 내용 중 흥미로운 글을 발견했다. compose에서 상태를 UI에 바인딩할 때 사용되는 API 중 하나인 CollectAsState( )가 Dispatchers.Main를 사용하고 있다. 이로 인해 상태를 상태를 디스패치하는 과정에서 UI에 도달할 때마다 비동기적으로 상태를 전달하기 때문에 새로 업데이트된 상태와 UI의 동기화 문제가 발생할 수 있다. 이 문제는 context 인자에 Dispatcers.Main.immediate를 전달함으로써 해결할 수 있다. 하지만 2025년 2월 5일 기준으로 이 문제를 위해 추가된 API가 있다 하니 간단하게 알아보자.val uiState = viewModel.uiState.collectAsState(Dispa.. ViewModel의 One Time Event를 다루는 다양한 솔루션 서론ViewModel에서 발생하는 이벤트를 소비하는 방법엔 Channel, SharedFlow, State 등 다양한 방법이 있습니다. 프로젝트를 Compose로 Migration 하는 과정에서 이에 대한 솔루션이 필요해 여러 자료를 통해 프로젝트에 채택한 방법을 소개하겠습니다. 해당 글은 Youtuber Phillipp Lackner님의 영상을 번역한 자료로 필자는 영어를 잘 못하기 때문에... 유튜브 영상의 스크립트를 해석한 내용으로 잘못된 내용이 있을 수 있습니다.0. 필요 조건One Time Event를 위한 API는 다음 조건이 필요합니다.Event 발생 후 앱이 백그라운드로 내려갈 시 UI에선 구독을 중지해야 한다.동일한 Event를 중복해서 발생시키지 않아야 한다.(Ex. 같은 화면을 두 .. Channel 내부 동작 분석을 분석해보자 서론프로젝트에서 API 호출 시 발생하는 네트워크 에러처리에 대한 클래스를 StateFlow에서 Channel에서 변경하게 되었습니다. 기존에 사용하던 StateFlow는 중복된 에러를 방출하지 않는다는 문제가 있었습니다. 단순히 API 호출 실패로 인해 화면 이동이 안된다거나, 특정 동작이 반복될 가능성이 매우 희박한 곳에선 해당 문제를 발견하지 못했지만 이후 북마크 버튼을 클릭같이 단발적으로 반복해서 발생하는 이벤트에 대해선 문제가 발생했습니다.Channel 뜯어보기public fun Channel( capacity: Int = RENDEZVOUS, onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND, onUndeliveredEle.. [우아한 테크코스] 최종 테스트 0점 안드로이드 7기 최종 합격 후기 연말 마지막 선물로 우테코란 선물을 받게 되었습니다. 어떻게 최종 코테를 0점을 받았는데 합격을 하냐 어그로 아니냐 하실 수 있겠지만 시험 종료 전까지 제대로 구현도 못해 정확히는 테스트를 돌려보지도 못했습니다. 그래서 문제 조건에서 로컬 테스트를 통과하지 못한다면 0점으로 처리할 것을 명시했기 때문에 0점이라고 생각했습니다. 또한 프리코스 과정에서 2주 차 PR을 날려먹는 대참사가 났습니다. 그럼에도 불구하고 제가 어떻게 합격할 수 있었는지는 알 수 없지만 지난 2달간의 여정을 되돌아 돌아보려 합니다. 또한 다음 기수에 우테코에 도전하는 분들이 저처럼 큰 실수를 한다고 해서 좌절하거나 포기하지 않도록 조금이나마 도움이 되기 위해 작성합니다. 왜 우테코였을까?사실 우테코에 처음 지원할 때 그렇게 간절.. [Jetpack Compose] clickable Ripple Effect Custom (MutableInteractionSource & Indication) Modifier의 clickable 속성을 사용하면 기본으로 ripple 효과가 발생합게 되는데 이를 사용하다 보면 종종 ripple 효과를 제거하거나 적절히 커스텀해야 하는 상황이 발생합니다. 오늘은 ripple 효과를 적절히 커스텀하는 방법을 알아보고 이 과정에서 필요한 구성요소에 대해 분석해 보겠습니다.1. Ripple 효과 제거하기 ripple 효과를 제거하는 가장 쉬운 방법은 interactionSource와 indication을 인자로 받는 clickable을 사용해 indication을 null로, interactionSource에 remember { MutableInteractionSource() }을 전달하면 됩니다. 그렇다면 indication과 interactionSource은 무엇일.. Fragment에서 컴포즈를 사용해보자 최근 새로운 프로젝트에서 기존 View System과 같이 컴포즈를 사용하고 있습니다. 해당 프로젝트에서 Jetpack Navigation을 사용해 BottomNavigation을 구현한 화면에서 Fragment를 컴포즈로 대체해야 하는 상황이 발생했습니다. 바텀 네비게이션의 프래그먼트 화면이 전환되어도 BottomNavigation을 유지해야 했기 때문에 Activity -> Parent Fragment -> 두 개의 Child Fragment로 이루어진 환경에서 첫 번째 Child Fragment(바텀 네비게이션이 짠! 하고 화면에 띄워질 때 첫 번째 화면)을 컴포저블로 전환해야 하는 상황이 되었습니다. ComposeView공식 문서에서 안내하는 ComposeView를 사용하면 View 시스템에 Je.. 2024 회고록 올해도 어느덧 다 지나갔다. 2024년의 나는 어땠을까? 연말 회고록은 크리스마스에 술 한잔 하면서 쓰려했지만 이번엔 계획했던 Build - Logic이 생각보다 어려워 글로 남기기에 오래 걸릴 것 같아 회고록으로 대체해야겠다. 제목은 2024 회고록이지만 개발을 시작한 지난 4년간을 돌아보고 싶은 마음이 생겨 이를 포함하려 한다. 주의 : 글이 중구 난방인점은 미리 죄송합니다올해의 시작은 안드로이드올해 학교를 졸업하고 멋사의 앱 스쿨 부트캠프를 시작으로 안드로이드를 제대로 공부하기 시작했다. 졸업 후 바로 취업을 목표로 했기에 사실 부트캠프는 내게 있어서 가장 최악의 수라고 생각했다. 그래서 취업 전선에 뛰어들었지만 현실은 차가웠다. 70건 이상의 이력서에도 면접은 단 3번, 그중에서도 스스로 생각하기.. 이전 1 2 3 4 ··· 14 다음