본문 바로가기

Android57

[Android] 오픈소스 라이선스 목록 보여주기 - OssLicensesMenuActivity 위의 사진은 카카오톡의 오픈소스 라이선스 페이지입니다. 안드로이드 프로젝트를 하며 라이선스에 따라 사용한 오픈소스 라이브러리를 명시해줘야 하는 경우가 있습니다. 보통 앱을 만들게 되면 여러 가지 오픈소스를 사용하게 되는데요, 이 많은걸 일일이 다 추가해주려면 굉장히 번거로운 일이 아닐 수 없습니다. 이러한 번거로움을 해결해주기 위해 안드로이드 프로젝트에서 사용한 라이브러리를 자동으로 관리해주는 라이브러리가 있습니다. Google Play services에서 제공하는 oss licenses plugin을 사용하면 간단하게 사용할 수 있습니다. 사용법 사용법은 굉장히 간단합니다. gradle plugin과 library를 추가해준 뒤, 액티비티만 실행시켜주면 자동으로 생성됩니다. build.gradle (p.. 2021. 7. 3.
[Android] Tree 구조를 RecyclerView로 만들어보자 - TreeAdapter 위의 사진은 네이버 메일의 한 화면입니다. 네이버 메일에는 내 메일함을 트리 구조로 구성할 수 있는 기능이 있습니다. 메일을 분류하기 위해선 꼭 필요한 기능입니다. 위와 같이 리스트 형태를 트리 구조로 구성하려면 어떻게 하면 될까요? 이번 포스팅에서는 트리 구조를 가진 리스트를 구현해보도록 하겠습니다. 트리 구조란? 트리 구조는 그래프의 일종으로, 여러 노드가 한 노드를 가리킬 수 없는 구조를 뜻합니다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길이 하나뿐인 그래프를 트리라고 합니다. 이외의 트리 구조에 대한 자세한 설명은 이 글을 참고해주세요. 흔히 사용되는 폴더, 파일 구조 또한 트리의 종류입니다. 필요한 기능은 다음과 같습니다. 하나의 폴더에는 폴더 혹은 파일이 들어갈 수 있다. 폴더를 .. 2021. 7. 3.
[Android] Paging 3.0 Library 알아보기 - 1 Paging이란? 페이징이란 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 덩어리로 나눠서 가져오는 것을 뜻합니다. 예를 들어, 구글에서 어떤 키워드로 검색하게 되면 모든 데이터를 한 번에 가져오는 것이 아니라 10페이지씩 데이터를 가져오게 됩니다. 페이징을 사용하면 성능, 메모리, 비용 측면에서 굉장히 효율적입니다. Jetpack Paging Library Android Jetpack에서는 페이징을 위한 Paging3 라이브러리를 제공합니다. Paging3 라이브러리는 로컬 저장소에서나 네트워크를 통해 데이터를 나누어 효율적으로 로딩할 수 있게 도와줍니다. Paging3는 구글에서 권장하는 Android 앱 아키텍처에 맞게 설계되었으며, 다른 Jetpack 컴포넌트와 잘 동작할.. 2021. 6. 27.
[Android] Multi Module로 Android project 구성하기 최근에 회사에서 프로젝트를 진행하며 신입 때 작성했던 코드를 수정해야 하는 일이 생겼습니다. 첨부파일 업로드, 다운로드 관련 기능을 제공하는 클래스들이었는데, 당시 아키텍처에 대한 개념이 별로 없던 시절이라 코드가 구조화되지 않고 여기저기 흩어져 있었습니다. Helper, Manager와 같은 이름을 가진 클래스들이 데이터베이스를 직접 접근하여 클래스 사이의 의존성 또한 매우 높았습니다. 코드를 수정하며 느꼈던 생각이 '기존에 프로젝트를 진행하던 인원이 아닌 새로운 인원이 프로젝트에 투입돼도 어떻게 하면 의존성 규칙을 잘 지키면서 구조화된 기능을 구현할 수 있을까?'였습니다. 다른 사람들은 이와 같은 문제를 어떻게 해결했는지 검색해본 결과 클린 아키텍처와 멀티 모듈이 많이 나왔습니다. 그중 오늘은 멀티 .. 2021. 6. 20.
[Android] Event Wrapper를 사용한 단일 이벤트 처리 MVVM 패턴에서 ViewModel은 View에 대한 직접적인 참조를 할 수 없습니다. 이때 ViewModel에서 View의 이벤트를 전달해주기 위해선 어떻게 해야 할까요? 간단한 예를 들어보겠습니다. ViewModel에서 데이터를 받아왔는데 에러가 생기고 말았습니다. 에러에 대한 메시지를 사용자에게 토스트로 보여주고 싶습니다. 토스트를 화면에 보여주는 동작은 View의 역할입니다. 그럼 이때 ViewModel에서 View한테 에러가 났다는 이벤트를 전달해주어야 합니다. MVVM 패턴에서는 보통 ViewModel에서 LiveData를 선언한 뒤 View에서 LiveData를 옵저빙 하는 방식으로 많이 사용합니다. 위의 예시를 LiveData를 사용해서 구현해보겠습니다. class SampleViewMod.. 2021. 6. 20.
[Android] Kotlin으로 안드로이드 개발 시 테스트 하는 법 - MockK 프로젝트를 진행하며 테스트 코드의 중요성은 잘 알고 있었지만, 테스트 코드를 작성하는 게 익숙지 않기도 하고 일정이 빠듯하다는 핑계로 테스트 코드를 작성하지 않았었다. 언제까지 미룰 순 없어서 테스트 코드 작성법에 대하여 공부하게 되었고, MockK 라이브러리를 사용하여 테스트 코드를 작성하는 법을 알게 되었다. MockK 테스트 코드 작성 시 mock 처리를 위해 Java에서는 Mockito를 많이 사용한다. Kotlin에서는 Mockito와 유사한 MockK라는 라이브러리가 존재한다. Mockito와 사용법이 유사하여 조금만 노력하면 쉽게 적응할 수 있다. Dependency MockK를 사용하기 위해선 dependency 추가가 필요하다. 이 글을 쓰고 있는 현재의 최신 버전은 1.10.1이다. t.. 2021. 5. 26.