개발콩블로그
[Swift] 싱글톤 패턴 (Singleton Pattern) 본문
안녕하세요!
개발콩입니다. 오늘은 싱글톤 패턴 (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를 사용하여 최초 사용 이전까지 메모리에 올라가지 않는다는 이점을 얻을 수 있다는 점이 가장 큰 차이점 인 것 같습니다.
참조타입과 값타입의 경우에 대해서 다시 한번 더 생각하고 고민하여
다른 객체를 만들 때도 이러한 특성에 맞게 설계해야 함을 느꼈습니다.
'swift' 카테고리의 다른 글
[Swift] GCD - 2 스레드 실행 방식 (2) | 2025.01.30 |
---|---|
[Swift] GCD - 1 동시성 프로그래밍 (3) | 2025.01.25 |
[Swift] 프로퍼티 옵저버 (Property Observer) (0) | 2025.01.10 |
[Swift] 연산 프로퍼티(Computed Property) (2) | 2025.01.09 |
[Swift] Generic (1) | 2025.01.05 |