이번 글의 주인공은..!
싱글턴 패턴(Singleton Pattern)
이 친구는
특정 클래스의 인스턴스를 하나만 생성하여
애플리케이션 전체에서 공유할 수 있도록 하는 디자인 패턴입니다.
주로 애플리케이션의 전역 상태를 관리하거나, 리소스가 많이 소모되는 객체의 중복 생성을 방지하는 데 사용합니다.
우리가 프로젝트를 진행하게 되면
URLSessioin.shared, UserDefaults.standard 와 같은 친구들을 심심치 않게 보게 되는데
이들 역시 싱글턴 패턴을 이용한 사례입니다.
그래서 저는 싱글턴 패턴의 사용 목적에 맞게
아주 비싼 친구 DateFormmater를 위한 싱글톤 패턴을 만들어봤습니다.
final class ReuseDateformatter {
static var dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "ko_KR")
return formatter
}()
private init() {}
static func getDateString(date: Date) -> String {
dateFormatter.dateFormat = "yyyy년 MM월 dd일"
return dateFormatter.string(from: date)
}
static func getDate(dateString: String) -> Date {
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
return dateFormatter.date(from: dateString) ?? Date()
}
static func changeStringForm(dateString: String) -> String {
let changedDate = getDate(dateString: dateString)
let changedStringForm = getDateString(date: changedDate)
return changedStringForm
}
}
+
private init() {}
바로 이 친구 덕분에 외부에서 인스턴스 재생성을 막을 수 있습니다!
장점
위와 같이 싱글턴 패턴으로 관리하게 되면 초기화 비용이 큰 객체인 DateFormatter를
인스턴스를 하나만 생성하고 재사용하므로 리소스를 효율적으로 사용할 수 있습니다.
특히나 저의 경우,
이번 프로젝트에서 여러군데에서 날짜형식을 변환해야 했기 때문에
굉장히 효율적으로 사용할 수 있었습니다.
단점
장점만 보면 굉장히 편리할 것 같은 싱글턴 패턴도 확실한 단점들이 있는데요..!!
싱글턴 패턴은 무분별하게 사용하게 되면 코드 유지보수를 어렵게 만듭니다.
또한 가장 큰 단점으로 뽑히는 것이 바로 쓰레드 안전성입니다.
여러 스레드에서 동시에 접근하면 예상치 못한 동작이 발생할 수도 있다고 하는데,
제 생각엔 dispatchqueue를 사용해주면 어느정도 잡히지 않을까 생각됩니다. ㅎㅎ
후에 다시 한 번 코드에 적용해봐야겠어요!
그럼 오늘은 여기까지~
.
.
.
.
'Swift' 카테고리의 다른 글
[iOS] About 컬렉션뷰 속성 (0) | 2024.07.10 |
---|---|
[iOS] About 예외처리(Error Handling) (0) | 2024.07.07 |
[iOS] About Router pattern (0) | 2024.06.27 |
[iOS] About Alamofire (0) | 2024.06.23 |
[iOS] About URLSession - 2 (0) | 2024.06.19 |