본문 바로가기
Swift

[iOS] About 싱글턴 패턴

by dsungc 2024. 6. 29.

이번 글의 주인공은..!

싱글턴 패턴(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