[Swift] Design Pattern : Singleton

Seonhu Kim·2023년 5월 29일
0

Swift

목록 보기
6/7
post-thumbnail

싱글톤은 개발자에게 정말 편리하게 코딩을 할 수 있도록 도와주는 디자인 패턴이다. 하지만 싱글톤 패턴을 남용한다면 앱 안에서의 가장 큰 휴먼 에러를 남길 수 있다.

앞선 디자인 패턴을 얘기하다가 싱글톤 패턴도 정리하면 좋을 것 같아서 다시 한 번 서칭하고 공부하여 내용을 남긴다.

싱글톤 패턴은 주로 앱의 설정, 로깅, 데이터베이스 연결, 캐시 관리 등 여러 곳에서 활용된다.

싱글톤 패턴의 장점

  • 전역 액세스: 어디서든 싱글톤 인스턴스에 접근할 수 있으므로 코드 전체에서 일관된 상태를 유지할 수 있다.
  • 리소스 관리: 싱글톤은 전역 인스턴스로 리소스를 효율적으로 관리할 수 있으며, 인스턴스 생성 및 해제를 중앙에서 관리하므로 리소스의 낭비를 줄일 수 있다.
  • 지연된 초기화: 싱글톤 인스턴스는 필요한 시점까지 생성되지 않으므로, 초기화에 필요한 리소스를 지연시킬 수 있다.

싱글톤 패턴의 단점

  • 메모리 점유: 싱글톤은 프로그램이 실행되는 동안 계속해서 메모리를 점유한다. 이는 성능 저하를 초래할 수 있다.
  • 의존성 관리 어려움: 싱글톤은 전역적으로 접근 가능한 상태를 가지므로 다른 객체들이 이를 의존하게 된다. 이로 인해 의존성 관리가 어려워지고, 객체 간의 결합도가 높아지므로 코드의 유지보수가 어려워질 수 있다.
  • 멀티스레드 환경에서의 주의: 싱글톤은 전역적인 상태를 가지기 때문에 여러 스레드에서 동시에 싱글톤에 접근하면 예기치 않은 동작을 초래할 수 있다.

애플리케이션 설정 관리

class AppSettings {
    static let shared = AppSettings()
    
    var themeColor: UIColor = .blue
    var notificationEnabled: Bool = true
    
    private init() {
        // 초기화 로직
    }
    
    // 추가적인 설정 관련 메서드나 프로퍼티들...
}

네트워크 클라이언트 관리

class NetworkClient {
    static let shared = NetworkClient()
    
    private init() {
        // 초기화 로직
    }
    
    func request(url: URL, completion: (Data?, Error?) -> Void) {
        // 네트워크 요청 로직
    }
    
    // 추가적인 네트워크 관련 메서드들...
}

데이터 캐시 관리

class DataCache {
    static let shared = DataCache()
    
    private var cache: [String: Data] = [:]
    
    private init() {
        // 초기화 로직
    }
    
    func getData(for key: String) -> Data? {
        return cache[key]
    }
    
    func setData(_ data: Data, for key: String) {
        cache[key] = data
    }
    
    // 추가적인 캐시 관련 메서드들...
}
profile
iOS Developer.

0개의 댓글