728x90

분류 전체보기

    [Android] Tree 구조를 RecyclerView로 만들어보자 - TreeAdapter

    위의 사진은 네이버 메일의 한 화면입니다. 네이버 메일에는 내 메일함을 트리 구조로 구성할 수 있는 기능이 있습니다. 메일을 분류하기 위해선 꼭 필요한 기능입니다. 위와 같이 리스트 형태를 트리 구조로 구성하려면 어떻게 하면 될까요? 이번 포스팅에서는 트리 구조를 가진 리스트를 구현해보도록 하겠습니다. 트리 구조란? 트리 구조는 그래프의 일종으로, 여러 노드가 한 노드를 가리킬 수 없는 구조를 뜻합니다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길이 하나뿐인 그래프를 트리라고 합니다. 이외의 트리 구조에 대한 자세한 설명은 이 글을 참고해주세요. 흔히 사용되는 폴더, 파일 구조 또한 트리의 종류입니다. 필요한 기능은 다음과 같습니다. 하나의 폴더에는 폴더 혹은 파일이 들어갈 수 있다. 폴더를 ..

    [Android] Paging 3.0 Library 알아보기 - 1

    Paging이란? 페이징이란 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 덩어리로 나눠서 가져오는 것을 뜻합니다. 예를 들어, 구글에서 어떤 키워드로 검색하게 되면 모든 데이터를 한 번에 가져오는 것이 아니라 10페이지씩 데이터를 가져오게 됩니다. 페이징을 사용하면 성능, 메모리, 비용 측면에서 굉장히 효율적입니다. Jetpack Paging Library Android Jetpack에서는 페이징을 위한 Paging3 라이브러리를 제공합니다. Paging3 라이브러리는 로컬 저장소에서나 네트워크를 통해 데이터를 나누어 효율적으로 로딩할 수 있게 도와줍니다. Paging3는 구글에서 권장하는 Android 앱 아키텍처에 맞게 설계되었으며, 다른 Jetpack 컴포넌트와 잘 동작할..

    [Android] Multi Module로 Android project 구성하기

    최근에 회사에서 프로젝트를 진행하며 신입 때 작성했던 코드를 수정해야 하는 일이 생겼습니다. 첨부파일 업로드, 다운로드 관련 기능을 제공하는 클래스들이었는데, 당시 아키텍처에 대한 개념이 별로 없던 시절이라 코드가 구조화되지 않고 여기저기 흩어져 있었습니다. Helper, Manager와 같은 이름을 가진 클래스들이 데이터베이스를 직접 접근하여 클래스 사이의 의존성 또한 매우 높았습니다. 코드를 수정하며 느꼈던 생각이 '기존에 프로젝트를 진행하던 인원이 아닌 새로운 인원이 프로젝트에 투입돼도 어떻게 하면 의존성 규칙을 잘 지키면서 구조화된 기능을 구현할 수 있을까?'였습니다. 다른 사람들은 이와 같은 문제를 어떻게 해결했는지 검색해본 결과 클린 아키텍처와 멀티 모듈이 많이 나왔습니다. 그중 오늘은 멀티 ..

    [Android] Event Wrapper를 사용한 단일 이벤트 처리

    MVVM 패턴에서 ViewModel은 View에 대한 직접적인 참조를 할 수 없습니다. 이때 ViewModel에서 View의 이벤트를 전달해주기 위해선 어떻게 해야 할까요? 간단한 예를 들어보겠습니다. ViewModel에서 데이터를 받아왔는데 에러가 생기고 말았습니다. 에러에 대한 메시지를 사용자에게 토스트로 보여주고 싶습니다. 토스트를 화면에 보여주는 동작은 View의 역할입니다. 그럼 이때 ViewModel에서 View한테 에러가 났다는 이벤트를 전달해주어야 합니다. MVVM 패턴에서는 보통 ViewModel에서 LiveData를 선언한 뒤 View에서 LiveData를 옵저빙 하는 방식으로 많이 사용합니다. 위의 예시를 LiveData를 사용해서 구현해보겠습니다. class SampleViewMod..

    [Android] Kotlin으로 안드로이드 개발 시 테스트 하는 법 - MockK

    프로젝트를 진행하며 테스트 코드의 중요성은 잘 알고 있었지만, 테스트 코드를 작성하는 게 익숙지 않기도 하고 일정이 빠듯하다는 핑계로 테스트 코드를 작성하지 않았었다. 언제까지 미룰 순 없어서 테스트 코드 작성법에 대하여 공부하게 되었고, MockK 라이브러리를 사용하여 테스트 코드를 작성하는 법을 알게 되었다. MockK 테스트 코드 작성 시 mock 처리를 위해 Java에서는 Mockito를 많이 사용한다. Kotlin에서는 Mockito와 유사한 MockK라는 라이브러리가 존재한다. Mockito와 사용법이 유사하여 조금만 노력하면 쉽게 적응할 수 있다. Dependency MockK를 사용하기 위해선 dependency 추가가 필요하다. 이 글을 쓰고 있는 현재의 최신 버전은 1.10.1이다. t..

    [Android] Sticky Header RecyclerView 응용하기

    이번 포스팅에는 위와 같은 애니메이션 효과를 구현할 것이다. 위의 구글 캘린더 앱을 보면 왼쪽의 날짜와 요일이 좌측 상단에 고정되어 표시되고 있다. 같은 요일의 일정들이 있으면 좌측의 날짜는 고정이 되고 다음 요일로 지나가게 되면 위로 밀려 올라가는 방식이다. 프로젝트에서 위와 같은 애니메이션을 적용해야 했을 때 Sticky Header RecyclerView가 떠올랐다. 보통의 Sticky Header RecyclerView는 위의 사진과 같이 RecyclerView에서 위의 헤더를 고정시킬 때 많이 사용한다. 위와 같은 방식을 조금 응용하면 쉽게 구현할 수 있을 듯 했다. Sticky Header RecyclerView는 RecyclerView에 ItemDecoration을 추가하는 방식으로 사용한다..

    [Android] LeakCanary로 메모리릭 잡기

    LeakCanary란? LeakCanary란 Square사에서 만든 오픈소스 라이브러리로써, 메모리릭을 감지하여 OOM(Out of Memory) 에러를 줄일 수 있도록 도와준다. 메모리릭(Memory leak)이란? 메모리릭이란 애플리케이션에서 더 이상 필요로 하지 않는 객체의 참조를 가지고 있는 것이다. 이렇게 되면 해당 객체에 할당된 메모리를 회수 할 수 없게 되고OOM을 발생시킨다. 안드로이드에서는 주로 객체의 라이프사이클과 관련해서 많이 발생한다. 예를 들어, Activity는 onDestroy() 함수 호출 이후엔 더 이상 필요 없어지게 되며 GC의 대상이 되어 메모리 할당을 해제한다. 하지만 어디선가 Activity를 강하게 참조하고 있다면, GC의 대상에서 제외되서 메모리릭이 발생하게 된..

    [Android] 문자열 단/복수 처리 - plurals

    다국어를 지원하는 앱이라면 문자열을 처리할 때 보통 strings.xml 에서 문자열을 가져와서 보여줍니다. strings.xml 파일로 대부분의 문자열을 처리할 수 있지만, 만약 영어처럼 단/복수가 구분된 경우에는 어떻게 처리를 해야 할까요? 이런 경우에는 안드로이드 리소스 중에 plurals 요소를 사용하면 편리하게 관리할 수 있습니다. plurals 요소를 활용할 수 있는 예로는 one minute, 2 minutes이 있습니다. 먼저 plurals 요소를 사용하지 않고 string 요소를 사용한다면 어떻게 표기해야 할까요? 우선 strings.xml에 리소스를 만들어 줍니다. %d분 %d분 one minute %d minutes 단수, 복수를 구분하여 2개의 리소스를 만든 뒤, 소스 코드에서 개수..

728x90