현재 진행하고 있는 프로젝트에서, 기존 모놀리틱 구조를 다중 모듈 프로젝트로 마이그레이션 하였다. 마이그레이션을 하면서, 종속성을 관리하기 위해 VersionCatalog를, 플러그인을 관리하기 위해 Custom Convention Plugin을 도입하였다. 필자는 다른 레퍼런스를 확인하며 구현하였지만, 제대로 알고 쓰지 않는 것 같았다. 따라서 이번 포스팅을 통해 Custom Convention Plugin을 정리하고, 소개하고자 한다. Task 컴파일된 코드를 실행가능한 파일로 변환하는 작업을 빌드라고 한다. 안드로이드로 가정하면, 컴파일된 코틀린 파일을 aab, apk와 같은 실행가능한 파일로 만드는 작업을 의미한다. 이러한 작업은 우리가 정의한 Gradle 파일에서 Task 단위로 수행되며, Ta..
필자는 최근에 진행중인 프로젝트를 리팩터링 하였다. 기본 패키지, 파일 네이밍부터 핵심 로직 수정까지 거의 모든 파일을 수정할 정도로 많은 작업을 수행했다. 그렇다 보니, 내가 수정한 작업이 정말 이전과 같이 잘 동작하는지 파악하기가 정말 어려웠고, 시간도 많이 걸렸다. 수정한 로직에서 문제가 발생하여, 디버깅을 하면서 문제를 탐색하고 고민하는 시간이 정말 많았다. 테스트에 대한 시간 투자가 아까워, 계속해서 미루었던 나는, 이번에 테스트에 대해 공부해보고, 실제 프로젝트에 도입하려고 한다. 테스트를 왜 작성해야 할까? QA보다 더 훨씬 효율적으로 점검할 수 있다. 필요할 때 마다, 규모가 커지면 커질 수록 QA에 의존하는 것은 힘든 일이다. 자동화된 테스트는 앱의 확장가능성을 더욱 높여준다. 좋은 설계..
이번 게시글에서는 이전 게시글의 DateTime API를 이어서 설명한다. 이번 포스팅에서는 Instant, DateTimeFormatter, Kotlinx-DateTime API를 소개한다. Instant : 기계 관점에서 시간과 날짜 인간은 더 식별 가능하게, 더 기억하기 쉽게 날짜와 시간을 년도, 월일, 시분초와 같은 단위로 나누어 생각한다. 그럼 기계도 이렇게 저장할까? 당연히 아니다. 그럼 기계 관점에서 어떤 표기가 가장 효율적일까? 아마도 십진수를 이진법으로 변환하듯, 꾸준히 증가하는 연속된 시간에서 하나의 지점을 큰 수로 표현하는 것이 이상적일 것이다. Java에서는 Instant를 제공하여, Instant를 통해 기계관점에서 친화적인 시간과 날짜를 표기할 수 있다. 자세하게 Instant는..
어플을 개발할 때 많은 상황에서 시간을 활용해야 하는 순간이 발생한다. 이 때 우리는 DateTime API를 사용할 수 있다. DateTime 이전에 사용했던 Date, Calendar 라이브러리의 문제점과 DateTime 라이브러리를 소개한다. Date, Calendar vs DateTime Immutable Type 기존 Date, Calendar 라이브러리는 가변 클래스였다. 가변성은 날짜와 시간 같은 요소에서 좋지 않으며, 유지 보수를 어렵게 한다. DateTime은 불변 타입을 제공함으로써, 안전하게 사용할 수 있도록 설계되었다. Thread Safety Date, Calendar 라이브러리는 동시성 문제를 가지고 있었고, 이를 위해 추가적인 코드를 작성해야만 했다. DateTime은 불변 타..
선언형 UI Compose로 변경됨에 따라, 명령형 UI에서 선언형 UI로 변경되었다. 앞에서 이야기한 선언형 UI는 어떤 것이며, 명령형 UI와 어떤 차이점이 있을까? 기존 안드로이드 개발에서 데이터의 State가 변경되는 경우, findViewById를 통해 직접 Elements에 접근하여 setText, setImage와 같은 명령어를 사용하여 State를 직접 변경해야 했다. (ViewBinding 및 DataBinding도 개념은 같다.) 하지만 컴포즈는 선언형 UI이다. UI의 최종형태를 기술하면, 프레임 워크가 자동으로 관리한다. 구체적으로, 프레임워크가 데이터의 상태가 변하는 경우 Elements의 State를 업데이트하는 것이 아닌 화면 전체를 다시 그린다. 모든 화면을 그리는 것이 아닌..
안드로이드의 Paging3 라이브러리는 다양한 소스로부터 대용량의 데이터를 효율적으로 관리하고 가져오는 Android Jetpack의 라이브러리이다. Paging3를 사용하면 로컬이나 네트워크로부터 페이지 단위의 데이터를 가져올 수 있다. 이번 포스팅에서는 Paging3 소개와 예제를 통해 Paging3의 사용법을 소개한다. 페이징 라이브러리의 장점 페이징된 데이터는 인-메모리 캐싱하며, 이를 통해 빠른 응답과 버벅거림 없이 데이터를 불러올 수 있다. 페이지의 끝에 도달하면 데이터를 요청하고 불러오는 리사이클러 뷰 어댑터를 제공한다. 중복된 요청을 막을 수 있어, 사용자의 대역폭과 시스템 리소스를 절약할 수 있다. 코틀린으로 구성되어 있어, 모든 코틀린 및 Jetpack 라이브러리와 완벽한 호환이 가능하..