Android/Tech (52) 썸네일형 리스트형 OkHttp3 Interceptor 를 통해 표준화된 응답의 에러 처리하기 동기 저는 보통 프로젝트 진행 시, 백엔드 개발자분께 '표준화된 형태로 성공 및 실패 응답을 반환해달라'고 요청하는 편입니다. 하나의 data class 를 통해 응답을 내려 받아 이에 대한 핸들링을 용이하게 하기 위해서입니다. 일관된 방식으로 요청의 성공 및 실패를 처리할 수 있으며, 더 나은 가독성을 가진 코드를 작성할 수 있게 되죠. 이번에 새롭게 진행하게 된 프로젝트 역시 마찬가지로, 백엔드 동료분께 같은 요청을 드렸습니다. 오늘은 표준화된 JSON 에서 에러를 파싱하기 위해 수행한 과정에 대해 기록하고자 합니다. 응답 표준화의 목적 응답을 표준화하는 이유는 간단합니다. 요청의 성공 또는 실패에 대한 처리를 간편화, 일관화할 수 있습니다. data class CTResponse( val code:.. ParentFragmentManager, ChildFragmentManager 동기 간만에 Android View 를 활용해 개발하고 있습니다. Jetpack Compose 를 통해 UI 를 구현한 시간이 길다보니, Fragment 에 대한 지식이 가물가물한 상태입니다. 특정 Fragment 에서 다른 Fragment 를 표시하려는 과정에서, parentFragmentManager 와 childFragmentManager 사이에서 고민하게 되었는데, 이 과정에서 알게 된 것을 간략하게 기록해보고자 합니다. FragmentManager 안드로이드 개발에서 Fragment 는 굉장히 자주 사용됩니다. UI 를 모듈화할 수 있는 것이 특징인데요. 이를 통해 여러 View 를 하나의 Fragment 로 구성하여, 또 하나의 거대한 View 처럼 활용할 수 있기도 합니다. Fragment .. Composable 파라미터 주의 사항 (feat.Recomposition) 동기 저는 Jetpack Compose 와 MVI 조합을 굉장히 좋아합니다. UI 상태는 uiState 라는 이름의 data class 를 주로 사용하는 편인데, 문득 uiState 를 통째로 넘겨 화면을 업데이트하고 있는 코드에 의문이 생겼습니다. '불필요한 Recomposition 은 Jetpack Compose 가 줄여준다고는 하지만, 확실한걸까?' 라는 의문이 말입니다. 이에 대해 시험한 결과와 함께, Jetpack Compose 사용 시 Composable 의 파라미터 선정에 대한 주의 사항을 기록하고자 합니다. 문제의 코드 @Composable private fun BoxScope.ColorBox(state: UiState) { Box( modifier = Modifier .align(Alig.. Service 를 운용하는 환경에서 앱을 완전히 종료하기 동기 지난 여름에 개발했던 앱 의 리팩토링이 한창입니다. 음악 플레이어 앱 특성 상, 음악을 재생 중이라면 앱이 종료되어도(된 것처럼 보여도) 플레이어의 상태가 유지되어야 합니다. 이러한 스펙을 구현하는 과정 중 학습했던 것을 기록합니다. 완전한 종료 공식 문서, Processes and app lifecycle 의 일부입니다. 다양한 앱 구성 요소의 수명 주기에 대한 이해가 부족하면 중요한 작업 도중 앱 프로세스가 종료될 수 있다는 내용인데, 이는 곧, 다양한 앱 구성 요소의 수명 주기에 대한 이해가 부족하면 앱 프로세스를 종료하고 싶어도 종료하지 못할 수 있다는 것을 의미하기도 합니다. 앱을 완전히 종료해야 하는 이유는 간단합니다. 나도 모르게 무한한 작업이 프로세스 내에서 진행되고 있거나, 미처 해.. AsyncTask 는 왜 Deprecated 되었는가? 동기AsyncTask 가 Deprecated 되었다는 사실은 이미 대부분의 안드로이드 개발자들이 알고 있는 사실입니다. 물론 저도 그렇고요. 전 회사에서 개발자를 준비하고 있었을 때, 개발 부서 개발자 분들께 소스 코드를 보고 싶다고 말씀드려서 구경했던 프로젝트에서는 AsyncTask 와 HttpUrlConnection 을 통해서 데이터 통신-UI업데이트를 수행하고 있었습니다. 그 때 보았던 코드가 아직도 눈에 선하네요. AsyncTask 가 Deprecated 되었지만 여전히 채택되고 있었던(어쩌면 지금도 채택되고 있을 수 있는) 이유는, Kotlin 이 아닌 Java 로 프로덕트를 개발하고 있었기 때문입니다. 저는 Kotlin 을 학습하여 회사 밖에서 다양한 개인 프로젝트 및 협업을 수행하였기 때.. Ktor 적용기 (feat.Ktor Generics Response Handler) 동기 현재 진행 중인 네이버 부스트캠프 파이널 프로젝트를 처음 시작할 때에, 팀 동료들과 기술 스택에 대해 이야기를 나눴습니다. 사용할만 한 여러 스택들에 대해 의논하였고, 적절한 스택들이 채택되었습니다. 그렇게 개발을 별 일 없이 진행하던 중, API 가 하나 둘 씩 나올 때가 되어 이를 연동하기 위해 Retrofit 에 관한 이런 저런 셋팅을 준비하려 했습니다. 의존성을 추가하려던 순간, 문득 Retrofit 을 그냥 적용하는게 맞나? 라는 의문이 들었습니다. 결국엔 Ktor 를 적용하기로 결정했죠. 결정의 이유는 세 가지가 있었는데요. 늘 가던 길을 선택하고 싶지 않았던 것이 첫 번째 이유였습니다. 새로운 것을 배워보고 싶었거든요. 이 때 아니면 또 언제 해보겠어라는 생각이 들었습니다. 두 번째 이.. Third-Party-Library 없이 비디오 컷 편집 기능 구현하기 동기 네이버 부스트캠프의 꽃, 그룹 프로젝트를 개발하고 있습니다. 실력있는 동료들과 함께 비디오와 관련된 앱 서비스를 기획, 디자인, 개발하고 있는데요. 제가 낸 주제이기도 하고, 비디오와 관련된 작업을 경험하고 싶었기도 해서 굉장히 즐겁게 개발하고 있습니다. '앱 내에서 비디오 컷 편집을 할 수 있다면 편하지 않을까?' 라는 생각이 들었고, '라이브러리 없이 개발하면 분명 어렵겠지만, 그만큼 배우는 것도 많고 재미도 있지 않을까?' 라는 생각도 들었습니다. 그래서 스스로의 기술적 도전 과제로 설정하여 구현해보기로 마음 먹었습니다. 해당 포스트는 라이브러리 없이 직접 비디오 컷 편집을 개발하는 과정과, 그 과정 안에서 알게 된 것을 기반으로 작성됩니다. Jetpack Compose 에서 비디오 불러오기 .. [Jetpack Compose] Clickable 이 외의 Ripple Effect 없애기 동기 네이버 부스트캠프 마지막 프로젝트 진행 중, BottomNavigation 의 Ripple 이펙트를 없애는 게 좋을 것 같아 이를 제거해달라고 동료분께 부탁드렸습니다. Clickable { } 이라고 생각을 해서 부탁드렸던 건데, 해당 Composable 을 보니 Clickable 속성이 아닌 다른 방식으로 터치를 받았습니다. 포스트 제목이 Clickable 이 외의 Ripple Effect 없애기 인 이유는, Clickable { } 일 때의 Ripple Effect 를 없애는 것에 대해서는 일전에 작성한 포스트가 있기 때문입니다. [Jetpack Compose] Clickable Ripple Effect 없애기 Android, iOS 등 모바일에서는 버튼이 눌렸다는 사실을 유저에게 알리기위해 R.. 이전 1 2 3 4 5 ··· 7 다음 목록 더보기