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

블로그 메뉴

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

공지사항

인기 글

최근 댓글

최근 글

태그

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

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
캐시 데이터 용량 표시 방식 개선하기: 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  (5) 2024.06.18
    'iOS' 카테고리의 다른 글
    • 왁뮤 3.0 출시 및 장애 대응 기록
    • GCD Sync, Async, Serial, Concurrent 조합해보기
    • GCD 공식문서 읽고 정리하기
    • Swift 6.0 접근제어자 Access Control
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바