목록전체 글 (53)
훌륭한 개발자가 되기 위하여
작성한 코드는 내부적으로 컴퓨터가 이해할 수 있는 데이터와 명령어의 형태로 변환된 뒤 실행된다.데이터 : 숫자, 문자, 이미지와 같은 정적인 정보 [명령어에 종속적인 정보이며, 명령의 대상 & 명령어의 재료]컴퓨터의 4대 핵심 구성 요소 (CPU, 메모리, 보조기억장치, 입출력장치)CPU (중앙처리장치) [두뇌] : 명령어와 데이터를 읽고 해석하고 실행CPU 구성요소ALU(산술논리연산장치) : 사칙, 논리 연산과 같은 연산을 수행할 회로 (계산기)CU(제어장치) : 명령어를 해석해 제어신호를 내보내는 장치제어장치란? 부품을 작동시키기 위한 신호레지스터 : CPU 내부의 임시 저장장치데이터와 명령어를 처리하는 과정의 중간값을 저장 메모리 (주기억장치)실행 중인 프로그램을 구성하는 데이터와 명령어를 저장하는..
예외 처리(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) 위 구조는 단순히 운동 목록을 조회하는 목적에는 문제가 없었지만, 데이터 양이 많아질수록 사용자가 원하는 운동을 찾기 어렵다는 한계가 있었다. 이에 따라 검..