하루를살자

[Swift] Expansive DateFormatter : 어떻게 사용해야할까? 본문

Swift

[Swift] Expansive DateFormatter : 어떻게 사용해야할까?

Kai1996 2022. 6. 9. 22:12

WWDC 나 주변에서 dateFormatter 는 비싼 객체이고, 사용할때 신경써서 사용해야한다는 말을 들었다.

그럼 DateFormatter 를 언제, 어떻게 사용할때 성능저하를 일으킬까?

DateFormatter 를 사용하는 데 어떤 부분에서 시간이 오래걸리는지 이 아티클 에서 XCTest 의 Measure 메소드를 사용해서 정리해놓았다.

이 글을 요약하면 아래와같은 상황을 남발할때 성능저하(실행 속도가 느려짐으로 전체 프로그램이 버벅이는 현상) 를 불러올수 있다고 한다.

  1. DateFormatter 생성할때.
  2. DateFormatter 의 프로퍼티를 변경할때
  3. date(from: String) 을 실행할때

그럼 어떤 식으로 DataFormatter 를 사용해야할까?

  1. DateFormatter 가 생성되면 이후의 formatter 의 프로퍼티를 바꾸는 행위는 최대한 삼가한다.
  2. Date 에서 String 으로 변환 하는 작업을 남발하지 않는다.

코드를 어떤 방향으로 작성 해야 할까?

  • 성능을 개선하기 위해 사용될 dateformatter 인스턴스 들과 메소드 들 을 미리 생성해두어 사용될곳에 재사용한다.
  • 외부에서 각각의 formatter 들의 프로퍼티 변경을 막기 위해 싱글톤 패턴을 사용해서 구현한다.
class MyDateFormatter { 
    static let shared : MyDateFormatter() 

    private init(){} 

    private let periodFieldFormatter : DateFormatter{ 
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "M월 d일"
        dateFormatter.locale = Locale.current
        return dateFormatter
    }

    private let calendarDateFormatter: DateFormatter {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale.current
        dateFormatter.dateFormat = "EEEE, MMM d, yyyy"
        return dateFormatter
    }


    func periodDateString(from date: Date) -> String{ 
        periodFieldFormatter.string(from: date)
    }

    func calendarDateString(from date: Date) -> String{ 
        calendarDateFormatter.string(from: date)
    }

}

참조

https://sarunw.com/posts/how-expensive-is-dateformatter/

 

How expensive is DateFormatter | Sarunw

If you are working on iOS for long enough, there is a chance that you might have known that DateFormatter is expensive, but what is costly about DateFormatter? Let's find out in this article.

sarunw.com

 

 

 

'Swift' 카테고리의 다른 글

ARC (Automatic Reference Counter)  (0) 2022.08.06
[Swift] LinkedList  (0) 2022.08.05
Swift - Closure (2) : Trailing Closure  (0) 2022.02.27
Swift - Closure (1): 표현식  (0) 2022.02.27
Swift 고차함수  (0) 2022.02.05
Comments