안드로이드 면접대비 _ 3

안드로이드 면접 질문

진행했던 프로젝트에서 사용한 라이브러리에 대해서 정리하는 포스트

  1. 이미지 로딩 라이브러리 기본

  2. Picasso

  3. Glide 쓰는중
  4. Picasso VS Glide 아직 안씀
  5. Retrofit 아직 안씀
  6. Volley 아직 안씀
  7. Retrofit VS Volley 아직 안씀


0. 이미지 로딩 라이브러리 기본

이미지 로딩 과정의 숙제

  1. 불안한 HTTP 클라이언트 실행 환경
  2. 메모리가 넘치거나 새기 쉬운 비트맵 디코딩
  3. AsyncTask 클래스만으로는 충분하지 않은 병렬 처리
  4. 이미지 캐시와 View 재활용의 어려움

이미지 로딩 라이브러리 워크플로우

그림2

각각의 단계를 살펴보면 다음과 같다.

  1. 이미지 전처리: 이미지를 로딩하기 전에 섬네일이나 진행 상황을 보여 주기 위한 단계
  2. 이미지 로딩: 캐시나 네트워크에서 이미지를 가져오는 단계
  3. 디코딩: BitmapFactory를 이용하여 이미지를 비트맵 형식으로 변환하고 크기, 회전, 품질 등을 변환하는 단계
  4. 이미지 후처리: 보여 줄 이미지에 애니메이션이나 모서리를 둥글게 하는 등의 효과를 적용하는 단계.
  5. 보여 주기: UI 스레드에서 이미지를 보여 주는 단계

이 단계들 중 가장 중요한 부분은 이미지를 실제로 외부로부터 가져오는 ‘2. 이미지 로딩’과 ‘3. 디코딩’ 단계이다. 이 단계들의 자세한 과정을 아래에서 표현했다.

그림3

  1. 메모리 캐시에서 비트맵을 가져온다.
  2. 메모리 캐시에 비트맵이 있으면(cache hit), 이미지 후처리 단계로 진행한다.
  3. 메모리 캐시에 비트맵이 없으면(cache miss), 디스크 캐시에서 이미지를 가져온다.
  4. 디스크 캐시에 이미지가 있으면(cache hit), 비트맵으로 디코딩 후 비트맵을 메모리 캐시에 저장한다. 다음으로 이미지 후처리 단계를 진행한다.
  5. 디스크 캐시에 이미지가 없으면(cache miss), 이미지를 외부(네트워크, 리소스 등)에서 다운로드 한다.
  6. 이미지를 다운로드한 후, 디스크 캐시에 이미지를 저장한다.
  7. 이미지를 비트맵으로 디코딩한 후 비트맵을 메모리 캐시에 저장한다. 그리고 이미지 후처리 단계로 진행한다.

참고링크

자세한 내용은 아래에서 확인

위로


1. Picasso

Picasso는 Square Inc.가 개발한 이미지로드 라이브러리이다. 그리고 Square Inc.에서 개발한 HTTP 클라이언트 오픈 소스인 OkHttp를 HTTP 클라이언트로 활용한다. 메서드 체인 방식이라 직관적이고 사용하기 편리하다.

사용한 이유

특징 및 기능

  • 이미지의 원본 사용
  • 기본 ARGB_8888, RGB_565 변환 가능

  • 웹에서 이미지 로딩

  • 메모리 및 디스크 캐싱
  • 명시적으로 이미지 Resize 가능, 변형(Transforming)

  • Snapshot : 이미지에 대한 모든 정보를 텍스트로 출력

  • Debug Indicators : 이미지가 네트워크, 디스크 캐시, 메모리 캐시 중 어디에서 왔는지를 리본의 색깔로 나타내는 기능

장점

  • 이미지로딩 라이브러리 중 가장 가벼움
  • 빠른 캐시 속도
  • 순차적 다운로드 및 빠른 다운로드
  • 사용하기에 간단함

단점

  • 기본적으로 많은 메모리 사용 (원본 이미지를 디스크에 저장하고 메모리에 할당하기 때문에)
    • resize 처리 및 fit 메서드를 통해 해결 가능
    • ImageView의 크기를 고정으로 하는 것이 가장 좋은 방법
  • 비교적 정보 부족(?)

사용법

1
2
3
4
Picasso
.with(context)
.load(url)
.into(imageView);

더 상세한 내용

참고 링크

위로


2. Glide

Glide는 Google에서 개발한 이미지로드 라이브러리.

Glide is a fast and efficient image loading library for Android focused on smooth scrolling. Glide offers an easy to use API, a performant and extensible resource decoding pipeline and automatic resource pooling.

Glide supports fetching, decoding, and displaying video stills, images, and animated GIFs. Glide includes a flexible api that allows developers to plug in to almost any network stack. By default Glide uses a custom HttpUrlConnection based stack, but also includes utility libraries plug in to Google’s Volley project or Square’s OkHttp library instead.

Glide’s primary focus is on making scrolling any kind of a list of images as smooth and fast as possible, but Glide is also effective for almost any case where you need to fetch, resize, and display a remote image.

사용한 이유

특징 및 기능

  • 기본 RGB_565(Half size), ARGB_8888 변환 가능
  • ImageView에 맞게 Resize
  • Custom animation & transformation
  • GIF, Thumbnail 지원

장점

  • 많은 커스텀 기능 제공
  • 빠른 로딩 속도
  • 비교적 정보 많음
  • 사용하기에 간단함

단점

  • 무거움

사용법

1
2
3
4
Glide
.with(context)
.load(url)
.into(imageView);

더 상세한 내용

참고링크

위로


3. Picasso VS Glide

참고링크

위로


4. Retrofit

사용한 이유

  • REST API 라이브러리 중 가장 좋은 성능
  • AsynTask, HttpURLConnection에 비해 훨씬 간단한 구현 방법

위로


5. Volley

사용한 이유

위로


6. Retrofit VS Volley

참고링크

위로

Share