티스토리 뷰

etc.

[Design Pattern] Swift Singleton 만들기

Kim_Baechu 2021. 1. 27. 16:51

Managing a Shared Resource Using a Singleton

단 하나의 공유된 클래스 인스턴스를 사용하여 공유 자원에 대한 접근을 제공

 

Overview

싱글톤을 사용하여 글로벌로 접근할 수 있는 공유 클래스 인스턴스를 제공합니다.

앱을 통해 공유되는 리소스 또는 서비스에 대한 통합 access point를 제공하는 방법으로 싱글톤을 만들 수 있습니다.

예를 들어 사운드 효과를 재생하기 위한 오디오 채널이나 HTTP 요청을 만들기 위한 네트워크 관리자가 있습니다.

 

Create a Singleton

static type property를 사용하여 간단하게 싱글톤을 만들 수 있습니다.

멀티 쓰레드에서 동시에 액세스하더라도 한 번만 Lazy하게 초기화 됩니다.

class Singleton {
    static let sharedInstance = Singleton()
}

초기화 이외의 추가 설정을 해야할 경우 클로저의 호출 결과를 글로벌 상수에 할당할 수 있습니다.

class Singleton {
    static let sharedInstance: Singleton = {
        let instance = Singleton()
        // setup code
        return instance
    }()
}

 

 

 

developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton

 

Apple Developer Documentation

 

developer.apple.com

 

 

싱글톤의 장점

- 재사용이 가능하여 메모리 낭비를 방지할 수 있다.

 

"Anti-Pattern"

1. 싱글톤 클래스는 객체 지향 설계 원칙을 위반한다.

 - 상속 불가능. 새로운 클래스가 상속될 수 없어서 새로운 기능을 추가할 때 Separation of Concern(관심사 분리)을 위반한다.

 - 생성에 대한 제어가 없습니다. 존재하는 인스턴스에 대한 참조인지 새로운 인스턴스에 대한 참조인지 알 수 없습니다.

 - dependency injection(의존성 주입)을 막습니다. 클래스의 인스턴스가 하나기 때문에 의존성을 주입할 수 없습니다. 프로퍼티를 통해 하면, 모든 참조에 대해 의존성이 변경됩니다.

 

2. 싱글톤 클래스는 TDD를 허용하지 않는다.

 - 생성에 대한 제어가 없기 때문에 객체의 'clean' 인스턴스는 각각의 테스트에서 사용할 수 없습니다.

 - 의존성 주입 없는 mock 객체는 테스트에 사용할 수 없습니다.

 

en.wikipedia.org/wiki/Singleton_pattern

댓글
공지사항