728x90

android

    [Android] Kotlin Coroutine 기본 개념 익히기

    Coroutine이란? 안드로이드에서 비동기 프로그래밍을 하기 위해선 AsyncTask나 Rx 등 여러 솔루션들이 있습니다. 코루틴 역시 비동기 프로그래밍을 하기 위해 나온 개념입니다. 코루틴을 이용하면 메모리를 효율적으로 사용하면서 손쉽게 비동기 처리를 할 수 있습니다. 코루틴은 코틀린 언어의 하위 개념이 아닌, 오래전부터 C#, Python, Go 등의 다양한 언어에서 지원하고 있던 개념입니다. 코루틴은 Co + Routines의 약자로써 Co는 Cooperation, Routines은 functions을 의미합니다. 즉, 서로 협력하는 함수들이라는 의미로, 여러 함수들이 번갈아가면서 실행되어 비동기적인 프로그래밍이 가능합니다. 코루틴은 흔히 경량 스레드라고 불립니다. 코루틴은 스레드 위에서 실행되는..

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

    이번 포스팅에는 이전 글에서 언급했었던 Paging2에 없던 Paging3.0만의 기능을 설명해보려고 합니다. Paging3.0의 개념과 기본적인 사용 방법은 이전 글을 참고해주세요. [Android] Paging 3.0 Library 알아보기 Paging이란? 페이징이란 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 덩어리로 나눠서 가져오는 것을 뜻합니다. 예를 들어, 구글에서 어떤 키워드로 검색하게 되면 leveloper.tistory.com 1. 데이터 스트림 변환 Paging을 사용할 때 데이터를 가공해야 하는 경우가 많이 생깁니다. 예를 들어, 데이터를 화면에 표시하기 전에 먼저 필터링을 하거나 데이터를 다른 형태로 변환해야 할 수도 있습니다. Paging3.0은 기본적..

    [Android] buildSrc를 통한 Dependency 관리

    클린 아키텍처를 공부하며 Github에서 여러 가지 오픈소스를 분석하던 중, Fernando Cejas님의 Android-CleanArchitecture-Kotlin 프로젝트를 보게 되었습니다. 그중 dependency를 관리하는 방법이 기존에 알고 있던 방법과 달라서 buildSrc에 대해 공부하게 되었습니다. 멀티 모듈로 구성된 프로젝트에서 buildSrc를 통해 dependency를 관리하면 좋을 것 같습니다. Gradle 공식 문서에 아래와 같은 설명이 나와 있습니다. Use buildSrc to abstract imperative logic …. The directory buildSrc is treated as an included build. Upon discovery of the direct..

    [Android] Clean Architecture in Android

    Clean Architecture란? 고객들에게 제공하는 애플리케이션 같은 경우에는 수많은 기능들이 있기에 복잡도가 굉장히 높습니다. 복잡도가 높은 애플리케이션을 개발할 때 어떻게 하면 유지 보수하기 쉽고 고품질의 코드를 작성할 수 있을까요? 애플리케이션은 새로운 기능이 추가된다거나 내부 로직이 변경되어야 하는 일이 생겼을 때 유연하게 대처할 수 있도록 구조화해야 합니다. 프로젝트를 진행하며 테스트가 용이하고 유지 보수하기 쉽게 구조를 구성하고 싶어서 클린 아키텍처에 대해 공부하게 되었습니다. 클린 아키텍처의 개념은 2012년에 Robert C. Martin (Uncle Bob)님이 블로그에 기재하며 세상에 나오게 되었습니다. 클린 아키텍처의 목표는 계층을 분리하여 관심사를 분리하는 것입니다. 관심사를 ..

    [Android] 오픈소스 라이선스 목록 보여주기 - OssLicensesMenuActivity

    위의 사진은 카카오톡의 오픈소스 라이선스 페이지입니다. 안드로이드 프로젝트를 하며 라이선스에 따라 사용한 오픈소스 라이브러리를 명시해줘야 하는 경우가 있습니다. 보통 앱을 만들게 되면 여러 가지 오픈소스를 사용하게 되는데요, 이 많은걸 일일이 다 추가해주려면 굉장히 번거로운 일이 아닐 수 없습니다. 이러한 번거로움을 해결해주기 위해 안드로이드 프로젝트에서 사용한 라이브러리를 자동으로 관리해주는 라이브러리가 있습니다. Google Play services에서 제공하는 oss licenses plugin을 사용하면 간단하게 사용할 수 있습니다. 사용법 사용법은 굉장히 간단합니다. gradle plugin과 library를 추가해준 뒤, 액티비티만 실행시켜주면 자동으로 생성됩니다. build.gradle (p..

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

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

    [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..

728x90