Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • 부스트캠프
    • iOS
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • Optional
  • 알고리즘
  • constraint
  • CS
  • AVAudioSession
  • Animation
  • ImageResource
  • 소프트웨어 테스트
  • boj
  • 부스트캠프
  • guard
  • image
  • 소프트웨어공학
  • Git
  • Swift5.7
  • if let
  • alamofire
  • 백준
  • MVC
  • 모듈화
  • 티스토리챌린지
  • swift
  • SwiftUI
  • jekyll
  • Concurrency
  • AutoLayout
  • Python
  • 소프트웨어 공학
  • ios
  • 오블완

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
iOS

캐시 데이터 용량 표시 방식 개선하기: ByteFormatter

캐시 데이터 용량 표시 방식 개선하기: ByteFormatter
iOS

캐시 데이터 용량 표시 방식 개선하기: ByteFormatter

2024. 7. 29. 01:40

캐시 데이터 용량 표시 방식 개선하기: ByteFormatter

프로젝트를 진행하며 이미지 캐시를 제거하는 기능을 개발하게 되었는데요.
캐시 데이터 용량을 어떻게 표기할까 고민하다 너무 작지도 크지도 않도록 MB 단위로 표현하기로 정하고 byte를 1024 로 2번 나누어 MB로 변환하여 표기했습니다.

하지만 코드리뷰를 진행하며 팀원분께 더 나은 방식을 배웠는데요.

까먹지 않도록 정리해두려고 합니다!

왜 ByteFormatter를 사용해야 할까?

기존 방식에서는 용량을 항상 MB 단위로 표시했습니다. 이렇게 되면 GB 이상의 큰 용량을 표현하거나, KB나 Byte 단위의 작은 용량일 때는 어색해 보일 수 있습니다. 이를 개선하기 위해 ByteFormatter를 사용하면 Byte, KB, MB, GB 등 적절한 단위로 가변적으로 표시할 수 있어 매우 유용합니다.

아래는 캐시 데이터 용량을 MB 단위로 고정하여 표시하던 기존 코드입니다.


  
ImageCache.default.calculateDiskStorageSize { result in
switch result {
case let .success(size):
let mbSize = (Double(size) / 1024 / 1024)
let sizeString = String(format: "%.2f MB", mbSize)
print(sizeString) // 10.23 MB
case let .failure(error):
let description = error.localizedDescription
print(description)
}
}

ByteFormatter를 활용한 개선된 코드

이제 ByteFormatter를 사용하여 용량을 더 직관적으로 표시하도록 개선해보겠습니다.


  
ImageCache.default.calculateDiskStorageSize { result in
switch result {
case let .success(size):
let formatter = ByteCountFormatter()
formatter.allowedUnits = .useAll // 모든 단위 사용 가능
formatter.countStyle = .decimal // 소수점 단위로 표기
// 크기를 ByteFormatter를 통해 문자열로 변환합니다.
let sizeString = formatter.string(fromByteCount: Int64(size))
print(sizeString) // 45 KB, 10 MB, 1 GB, ...
case let .failure(error):
let description = error.localizedDescription
print(description)
}
}
  • ByteCountFormatter: 용량을 적절한 단위로 표시할 수 있게 도와주는 클래스입니다.
  • allowedUnits: 사용할 수 있는 단위를 지정합니다. .useAll을 사용할 경우 size에 맞게 Byte, KB, MB, GB 등을 자동으로 선택합니다.
  • countStyle: decimal 옵션을 사용해 소수점 단위로 표기할 수 있습니다. 항상 소숫점이 표기되는 것은 아니며 내부 로직에 의해 소숫점이 필요하다고 판단될 때 추가된다고 합니다.

이제 캐시 데이터 용량과 상관없이 더 직관적인 용량 정보를 제공할 수 있게 되었네요!

결과

저작자표시 (새창열림)

'iOS' 카테고리의 다른 글

왁뮤 3.0 출시 및 장애 대응 기록  (8) 2024.09.07
GCD Sync, Async, Serial, Concurrent 조합해보기  (1) 2024.07.30
GCD 공식문서 읽고 정리하기  (0) 2024.07.26
Swift 6.0 접근제어자 Access Control  (0) 2024.07.02
Swift 메모리 관점에서의 Image  (4) 2024.06.18
  • 캐시 데이터 용량 표시 방식 개선하기: ByteFormatter
  • 왜 ByteFormatter를 사용해야 할까?
  • ByteFormatter를 활용한 개선된 코드
  • 결과
'iOS' 카테고리의 다른 글
  • 왁뮤 3.0 출시 및 장애 대응 기록
  • GCD Sync, Async, Serial, Concurrent 조합해보기
  • GCD 공식문서 읽고 정리하기
  • Swift 6.0 접근제어자 Access Control
Dev.YoungKyu
Dev.YoungKyu
iOS를 공부하고 있습니다

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.