seong_hye, the developer

Swift) Kingfisher에 대해 알아보기 본문

IOS

Swift) Kingfisher에 대해 알아보기

seong_hye 2022. 9. 20.

📘 Kingfisher

Swift에서 널리 사용되는 이미지 다운로드 및 캐싱 라이브러리

특히 URL 기반 이미지 로딩을 간단하게 처리할 수 있고.

내부적으로 강력한 메모리/디스크 캐싱, 다운로드 관리, 프리페치, 리사이징, 리사이클링 등을 제공

 

Kingfisher = Swift에서 이미지 URL을 비동기 로딩 + 캐싱까지 한 번에 해주는 라이브러리


🔹 주요 기능

기능 설명
URL 이미지 다운로드 imageView.kf.setImage(with: URL) 한 줄로 가능
메모리 + 디스크 캐싱 자동으로 처리 (옵션 조정 가능)
SwiftUI 지원 .kfImage 뷰로 간편하게 사용 가능
이미지 가공 리사이징, 블러, 라운딩, 필터 등 적용 가능
프리페칭 다가올 이미지 미리 다운로드
재사용 최적화 셀 재사용 상황에서 매우 효율적
프로그레스, 실패 처리 다운로드 상태 핸들링 지원

🔹 사용 방법

1. Kingfisher 설치

- XCode > File > Add Packages Dependencies...

URL : https://github.com/onevcat/Kingfisher 

 

- pod file 설치 후 패키치 다운로드

pod 'Kingfisher'


2.  사용 코드

UIKit 예시

import Kingfisher

let url = URL(string: "필요한 url 작성")
imageView.kf.steImage(with: url)

// indicator 표출 기능
imageView.kf.indicatorType = .activity

// 이미지를 가져오는 동안 애니메이션 표출
imageView.kf.setImage(
	with: url,
    placeholder: nil,
    options: [.transition(.fade(1.2))],
    completionHandler: nil
)

 

SwiftUI 예시

import Kingfisher
import SwiftUI

struct ContentView: View {
	let url = URL(string: "필요한 url")
    
    var body: some View {
    	KFImage(url)
        	.resizable()
            .scaledToFit()
            .placeholder { 	// 이미지 로딩 중 보여줄 화면 또는 코드 }
            .loadDiskFileSynchronously(true) // 디스크로부터 이미지 동기적으로 로드
            .cacheMemoryOnly() // 메모리에만 캐시하고 디스크에는 캐시하지 않음
            .fade(duration: 0.25) // 이미지로드가 완료되면 나타나게 할 애니메이션

🔹 캐싱 구조

종류 설명
Memory Cache NSCache 기반, 앱 실행 중 유지
Disk Cache 파일 시스템에 저장, 앱 재시작 후에도 유지
자동 정리 오래된/ 용량 큰 이미지 자동 제거 (설정 가능)

 

캐시 직접 제어할 경우

ImageCache.default.clearMemoryCache()
ImageCache.default.clearDiskCache()

🔹 Kingfisher vs  경쟁 라이브러리

항목 Kingfisher SDWebImage URLSession 직접 사용
사용 편의성 매우 간편 좋음 복잡함
캐시 자동화 O X -> 직접 구현 필요
SwiftUI 지원 O -> KFImage 제한적 X
가공 처리 필터, 변형 등 풍부 중간 직접 구현

 

'IOS' 카테고리의 다른 글

Swift) NSCache에 대해 알아보기  (0) 2022.10.03
Swift) Lottie 애니메이션 사용해보기  (0) 2022.09.22
Swift) Cocoapods에 대해 알아보자  (0) 2022.08.02
Swift) Alamofire에 대해 알아보자  (0) 2022.08.02
Swift) WidgetKit이란?  (0) 2022.08.02
Comments