생성된 API

Glide가 @GlideModule로부터 자동으로 만들어낸 클래스 (ex. GlideApp)

GlideApp.with(fragment)
.load(myUrl)
.placeholder(R.drawable.placeholder)
.fitCenter()
.into(imageView);

 

 

q. Glide로 쓰는 거랑 GlideApp으로 쓰는 거랑 사용하는 입장에서 어떤 효용의 차이가 있는 건지?

 

Glide

  • 모든 설정을 명시적으로 지정해야 함
  • 커스텀 옵션 적용 시 .apply(...)를 반복 사용해야 해서 코드가 장황해질 수 있음

 

GlideApp

  • 자주 쓰는 옵션을 메서드처럼 재사용 가능
  • 타입에 따른 커스텀 메서드도 가능 (ex. .asMyImage())

 


GlideExtension

GlideExtension 어노테이션이 달린 클래스는 다음 두가지 유형의 확장 메서드를 정의할 수 있다.

  • GlideOption - RequestOption에 커스텀 옵션 추가
  • GlideType - 새로운 리소스 유형(GIF, SVG 등)에 대한 지원 추가

 

GlideOption

GlideOption이 달린 정적 메서드는 RequestOption을 확장한다. 

 

GlideOption 어노테이션이 있는 메서드는 정적이며 BaseRequestOptions<?>를 반환해야 한다. 생성된 메서드는 표준 Glide 및 RequestOptions 클래스에서 사용할 수 없으며 생성된 등가물에서만 사용할 수 있다.

 

GlideType

GlideType 어노테이션이 달린 정적 메서드는 RequestManager를 확장한다. GlideType 어노테이션이 있는 메소드를 사용하면 기본 옵션 지정을 포함하여 새 유형에 대한 지원을 추가 할 수 있다.

 

GlideType 어노테이션이 달린 메서드는 반드시 <T> 타입이 GlideType 어노테이션에 제공된 클래스와 일치하는 첫 번째 인자로 RequestBuilder<T> 를 가져야 한다. 메서드는 정적이어야 하며 RequestBuilder를 반환한다. 메소드는 GlideExtension으로 어노테이션이 달린 클래스에서 정의되어야 한다.

 

q. Gilde에 커스텀 메서드를 추가해서 사용할 수 있다는 맥락으로 이해했는데 GlideOption과 GlideType은 무슨 차이인지?

 

@GlideOption과 @GlideType은 둘 다 Glide의 자동 생성 API(예: GlideApp)를 확장하는 커스텀 메서드 정의용 어노테이션입니다. 하지만 역할이 다릅니다.

 

@GlideOption

  • 역할: 자주 사용하는 옵션(RequestOptions)의 묶음을 재사용 가능한 메서드로 정의
  • 확장 대상: RequestOptions
  • 사용 목적: centerCrop(), circleCrop(), override(width, height) 같은 옵션을 자주 조합할 경우 묶어두고 GlideApp에서 바로 호출하게 함
GlideApp.with(context)
    .load(url)
    .apply(myCommonOptions())
    .into(imageView)

 

@GlideType

  • 역할: Glide가 로드할 데이터의 타입별로 처리 방식을 확장
  • 확장 대상: RequestManager
  • 사용 목적: 특정 타입 (예: MyImageModel)을 로딩할 때 기본 옵션을 자동으로 적용하게끔 정의
GlideApp.with(context)
    .asMyImage()
    .load(myImageModel)
    .into(imageView)

 


 

Placeholders Types Glide를 통해 서로 다른 상황에서 사용되는 세 가지 placeholder를 지정할 수 있다.

  • placeholder
  • error
  • fallback

 

Placeholder placeholder는 이미지 요청이 진행되는 동안 표시되는 Drawable이다. 요청이 성공적으로 완료되면 placeholder가 요청된 리소스로 바뀐다. 요청된 리소스가 메모리에서 로드되면 placeholder가 표시되지 않을 수 있다. 요청이 실패하고, Error Drawable이 설정되지 않은 경우 placeholder는 계속 표시된다. 마찬가지로 요청된 URL 또는 모델이 null이고 Error Drawable 또는 Fallback Drawable 이 설정되지 않은 경우 placeholder도 계속 표시된다.

 

Glide는 이미지 성능 최적화를 위해 다음 순서로 캐시를 탐색한다.

  1. 메모리 캐시 (RAM)
  2. 디스크 캐시
  3. 네트워크

 

요청된 리소스가 메모리에서 로드되면 placeholder가 표시되지 않을 수 있다.

 

Glide가 메모리 캐시에서 이미지를 바로 꺼내서 표시할 경우 placeholder가 보여질 틈도 없이 바로 실제 이미지가 뜰 수 있다는 의미이다.

 

1. placeholder()

  • 언제? 이미지 로딩이 시작되었지만 아직 완료되지 않은 상태에서 보여주는 이미지
  • 주요 목적: 로딩 중 사용자에게 임시 이미지 제공 (UX 향상)

 

2. error()

  • 언제? 이미지 로딩에 실패했을 때 보여주는 이미지 (예: 네트워크 오류, URL 잘못됨 등)
  • 주요 목적: 실패 상황을 시각적으로 알리기

 

Error 요청이 영구적으로 실패하면 Error Drawable이 표시된다. 요청된 URL / 모델이 null이고 Fallback Drawable이 설정되지 않은 경우 Error Drwable도 표시된다.

 

3. fallback()

  • 언제? load()에 넘긴 URL이나 리소스가 null일 때 보여주는 이미지
  • 주요 목적: null 케이스 대응 (예: 사용자 프로필 사진이 아직 없음)

 

 

 

placeholder엔 centerCrop()과 같은 transformation이 적용되지 않는다.

 

placeholder도 원형으로 보여주고 싶다면?

아예 원형으로 만들어진 drawable 리소스를 placeholder로 사용

 

RequestBuilder 옵션 글라이드에서 대부분의 옵션들은 Glide.with()에 의해 반환되는 RequestBuilder 객체에 직접적으로 적용할 수 있다. 사용 가능한 옵션들은 다음과 같다.

  • Placeholder
  • Transformation (ex. CenterCrop())
  • Caching Strategies (캐시 전략)
  • 인코딩 품질 또는 디코딩된 Bitmap 설정과 같은 Component specific options