개발콩블로그

[Swift] 싱글톤 패턴 (Singleton Pattern) 본문

swift

[Swift] 싱글톤 패턴 (Singleton Pattern)

devBean 2025. 1. 15. 23:36

안녕하세요!

개발콩입니다. 오늘은 싱글톤 패턴 (Singleton Pattern)에 대해서 알아보도록 하겠습니다!!

 

 

싱글톤 패턴(Singleton Pattern)이란?

Swift에서 싱글톤은 특정 클래스가 앱 메모리 전체에서 단 하나의 인스턴스만 가지도록 보장하고 사용하는 것 입니다.

 

 

 

Swift로 싱글톤 패턴 클래스 구현하기

아래의 코드는 Swift로 싱글톤 패턴을 만드는 예시 코드입니다.

final class Singleton {
    static let shared = Singleton()
    
    private init() { }
}

 

같은 클래스 타입의 static property를 초기화합니다.

static property는 해당 인스턴스를 최초 사용하기 전까지 메모리에 올라가지 않습니다.

 

싱글톤 클래스의 initializer의 접근제어를 private로 설정합니다.

클래스 외부에서 인스턴스화 될 수 없어야 하기 때문입니다.

 

싱글톤 클래스는 final 키워드를 사용합니다.

싱글톤 클래스는 단 하나의 인스턴스를 갖고 사용하는 것이므로, 상속이 필요하지 않습니다.

따라서 final 키워드를 사용하여 성능상의 이점을 갖음과 동시에 다른 클래스가 상속하지 못하도록 막을 수 있습니다.

 

 

 

싱글톤은 왜 Struct를 사용하지 않을까?

struct Singleton {
    static let shared = Singleton()
    var name: String = "banana"
    
    private init() { }
}

var singleton = Singleton.shared
singleton.name = "bean"

print(Singleton.shared.name) // banana
print(singleton.name) // bean

 

클래스는 참조타입으로 하나의 인스턴스의 주소에 대해서 참조를 하여 사용합니다.

반면, 구조체는 값이 복사가되어 결국 동일한 인스턴스를 공유할 수 없습니다.

따라서 싱글톤 패턴에는 구조체대신 클래스를 사용해야합니다.

 

 

제 결론 및 느낀점

싱글톤의 경우 전역변수와 비슷하게 사용할 수 있지만,

static property를 사용하여 최초 사용 이전까지 메모리에 올라가지 않는다는 이점을 얻을 수 있다는 점이 가장 큰 차이점 인 것 같습니다.

 

참조타입과 값타입의 경우에 대해서 다시 한번 더 생각하고 고민하여

다른 객체를 만들 때도 이러한 특성에 맞게 설계해야 함을 느꼈습니다.