MultiGallery

최한슬·2022년 10월 13일
1

library

목록 보기
1/1

개요

개인적으로 제작한 첫 라이브러리 MultiGallery에 대해 소개하고자 합니다.

일반적으로 사용자의 갤러리 이미지를 가져오기 위해서는 암시적 인텐트를 통해 사용자 갤러리 서비스에 요청하고 그 결과를 Activity Result로 전달받습니다.

 val intent = Intent()
        intent.type = "image/*"
        intent.action = Intent.ACTION_GET_CONTENT
        startActivityForResult(intent, DEFAULT_GALLERY_REQUEST_CODE)

DEFAULT_GALLERY_REQUEST_CODE의 상수를 가지고 사용자는 onActivityResult로 이미지 데이터를 전달받습니다.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (resultCode != Activity.RESULT_OK) {
            return
        }

        when (requestCode) {
            DEFAULT_GALLERY_REQUEST_CODE -> {
                data?.let {
                  val uri = it.data as Uri
                  // 이미지 uri를 가져옵니다.
                }
            }

            else -> {
                // requestCode가 다른 경우로 빠짐
            }
        }
    }

위의 방식은 일반적인 경우이며, 여기서의 단점은 모든 갤러리 작업을 안드로이드의 기본 앱에 의존한다는 점입니다. (사용자의 세부적이고 섬세한 컨트롤이 어렵다.)

특히, 크나큰 단점으로 꼽자면 사용자가 갤러리 이미지를 선택할 때, 개수의 제한없이 선택한다는 점입니다.

따라서, 사용자의 이미지 선택 개수를 제한하기 위해 MultiLibrary를 고안해냈습니다.

(옛날에도 있었던 라이브러리 기능이지만, 라이브러리 업데이트가 되지 않았고, Android 12부터 적용해야하는 "exported= true"도 적용되지 않아 정상적인 라이브러리가 없다 ^-^)

히스토리

라이브러리를 제작해보면서 간단한 히스토리(실패경험)를 얘기해보면 다음과 같은 이슈들이 있었습니다.

  • 왜 버전이 1.0.2부터인가?
  • 사용자가 편한 라이브러리는 어떤걸까?

왜 버전이 1.0.2부터 인가?

사실 1.0.0과 1.0.1버전이 있었으나 gradle이슈로 인해 정상적인 업로드가 진행되지 않아 1.0.2부터 출시하게 되었습니다.

사용자가 편한 라이브러리는 어떤걸까?

현재 직장에서 안드로이드 라이브러리인 aar(Android ARchive)을 제작하고 있습니다. B2B서비스였지만 개발자의 편의성을 고려하여 제작하는 것이 중요하였습니다. 이렇게 직장에서 가르침을 가지고 라이브러리를 제작했어야했는데 배운 것을 다 놓고 개발을 진행하여 1.0.2의 사용자가 불편한 라이브러리가 처음 출시되었습니다.

사용자의 편의성을 증가시키기 위한 좋은 라이브러리는 개인적으로 사전 작업이 적고 사용하는 api도 직관성이 있어야 한다고 생각합니다.

1.0.2 버전의 경우 사전 작업이 매우 많았다는 단점이 존재했습니다.

  • 라이브러리의 Manifest에서 정의했던 android:theme 부분이 겹쳐 Manifest Merge 에러 발생 => 해결을 위해 tools:theme를 사용자가 정의
  • 라이브러리를 만들면서 Glide라이브러리를 사용 ^^ => 사용자가 Glide 라이브러리를 implementation 해야함
  • 심지어 dataBinding을 이용하여 라이브러리 제작 ^~^ => 사용자가 kapt 플러그인과 dataBinding을 추가해야함

현재의 라이브러리는 "나였어도 이 라이브러리는 안쓸거같아!" 정도 수준의 라이브러리입니다. 특히 저 3가지 setting을 사용자가 추가해야하니 여간 불편한 라이브러리가 아닐 수 없습니다.

따라서, 버전 1.0.3에서는 사용자의 사전 작업을 줄이고자 저 3가지 의존성을 제거하여 출시하였습니다.

사용방법

https://github.com/hanseul-Choi/MultiGallery

해당 ReadMe에서 참고하시면 될 것 같습니다.

느낀점

사용자의 편의성을 고려한 라이브러리는 굉장히 어려운 것 같습니다. 특히, 어떠한 메소드를 작성하면서 사용자가 한번에 그 기능이 어떤 것인지 알 수 있게 네이밍해야하고, 사용자의 귀차니즘을 최대한 줄이면서 사용가능하게 해야한다는 점이 어렵습니다.

하지만, 제작을 통해서 라이브러리의 동작 원리와 Glide나 Retrofit과 같은 대중성있는 라이브러리들이 얼마나 많은 노고가 들어갔는지 알 수 있었습니다.

https://github.com/hanseul-Choi/MultiGallery

해당 링크로 사용이 가능합니다!

라이브러리가 업데이트 되는대로 계속해서 글에 살을 붙여나가겠습니다~ 감사합니다 (_ _)

profile
Android developer

0개의 댓글