목록분류 전체보기 (52)
훌륭한 개발자가 되기 위하여
예외 처리(exception handling)란?프로그램 실행 중에 발생하는 비정상적이거나 예외적인 상황에 대응하는 과정이다.예외는 네트워크 오류, 서버 오류, 데이터 파싱 실패 등 개발자가 완전히 통제할 수 없는 상황에서 주로 발생한다.[예외란?] https://jay20033.tistory.com/68 예외 처리가 필요한 이유?프로그램의 비정상 종료를 막고, 오류 상황에 맞는 대응을 할 수 있기 때문이다.예외 처리가 없다면, 앱이 갑자기 종료되거나 개발자만 이해할 수 있는 에러 메시지가 그대로 노출된다.💥기존 방식의 문제점프로젝트에는 이미 클린 아키텍처 구조가 적용되어 있었다.계층 분리는 되어 있었지만, 예외 처리 관점에서는 발생한 Exception을 그대로 UI에 노출하는 방식으로 처리하고 있었..
Jetpack Compose에서 ViewModelCompose에서는 Composable 자체가 ViewModelStoreOwner가 아니므로 ViewModel의 범위를 Composable로 지정할 수 없고 ViewModel의 생명주기를 맞출 수 없다.왜냐하면, ViewModelStoreOwner은 ComponentActivity, Fragment, NavBackStackEntry 만의 SubClass이기 때문이다.ViewModelStoreOwner란?ViewModelStoreOwner는 ViewModel을 저장하고 관리하는 컨테이너 역할을 하는 객체이다.ViewModelStoreOwner가 configuration change로 인해 삭제되고 재생성되었을때 ViewModelStore의 이전 owner를 ..
프로젝트에서 운동 기록을 날짜 단위로 보여주는 캘린더 UI가 필요했다.Jetpack Compose Material3에서 기본으로 제공하는 캘린더 관련 컴포넌트는 DatePicker, TimePicker 두 가지가 있다.이 컴포넌트들은 단순한 날짜 입력에는 적합하지만 월 단위 캘린더 UI나 날짜별 상태 표시(운동 기록 여부)를 표현하기에는 한계가 있었다.추가로 다른 사람들이 만들어놓은 외부 라이브러리가 있었지만 내가 원하는 형태로 커스텀하기에는 제한적인 부분이 있어 Custom Calendar를 직접 구현하기로 결정했다.요구사항 정리월 단위로 좌우 스와이프 가능특정 날짜 선택오늘 날짜 시각적으로 구분현재 달이 아닌 날짜는 흐리게 표시날짜마다 운동 기록 유무 상태 표시전체적인 구조상단에 현재 연도와 월을 표..
초기 설계 방식 대용량 운동 데이터를 서버 API를 통해 받아와 사용자에게 보여주는 기능을 구현했다.서버에서 운동 데이터를 Paging 방식으로 받아온 뒤, Jetpack Compose의 LazyColumn에 PagingData를 바인딩하여 출력하도록 구성하였다. val pagingExercises: Flow> = getPagedExercisesUseCase(10).map { pagingData -> pagingData.map { it.toPresentation() } } .cachedIn(viewModelScope) 위 구조는 단순히 운동 목록을 조회하는 목적에는 문제가 없었지만, 데이터 양이 많아질수록 사용자가 원하는 운동을 찾기 어렵다는 한계가 있었다. 이에 따라 검..
Paging을 적용 하게 된 계기프로젝트 구현 중 API를 통해 대규모 운동 데이터를 가져와야 했다.처음에는 단순히 API 호출 후 모든 데이터를 한 번에 불러오는 방식을 사용했지만, 다음과 같은 문제가 발생했다.초기 로딩 시간이 길어짐한 번에 많은 데이터를 메모리에 올려 리소스 낭비스크롤 시 사용하지 않는 데이터도 계속 유지됨이 문제를 해결하기 위해 Jetpack Paging3 라이브러리를 도입했다.Paging 라이브러리를 사용하면 로컬 DB 또는 네트워크로부터 대규모 데이터를 "페이지 단위"로 로드하고 UI에 표시할 수 있다.Paging3는 Google 권장 아키텍처(MVVM)에 맞게 설계되어 있어 Repository - ViewModel - UI 레이어가 명확하게 분리된다.Paging란 무엇인가?P..