apple/DesignPattern, Architecture
Swift 디자인패턴 Singleton Pattern (싱글톤 패턴)
lgvv
2022. 4. 12. 03:11
Swift 디자인패턴 Singleton Pattern (싱글톤 패턴)
Singleton 패턴은 애플리케이션 전체에서 하나의 인스턴스만 생성되도록 보장하며, 전역적으로 접근할 수 있는 접근점을 제공.
Swift 6부터는 동시성 문제가 발생할 수 있어서 주의해서 사용
히스토리
- 2022-04-12: 디자인 패턴 스터디 정리
- 2024-11-29: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경
Singleton Pattern
Singleton Pattern은 아래의 특성을 가짐
- 전역 접근성: 인스턴스를 전역적으로 접근 가능.
- 하나의 인스턴스: 클래스의 인스턴스는 프로그램 내에서 단 하나만 존재.
- 필요할 때 객체를 생성하며, 힙에 올라가고 앱이 종료될 때 해제됨.
장점
- 전역적으로 상태 관리에 용이
- 인스턴스가 하나만 생성되어서 객체가 여러개 생성됨으로써 발생하는 메모리 낭비 막을 수 있음
- 공통 자원의 일관성 유지
단점
- 글로벌 상태 문제로 인하여 코드의 의존성이 증가
- 의존성 주입 등으로 인해 테스트 환경을 구축하기가 어려울 수 있음
- 멀티스레드 환경에서 초기화 안전성 문제 존재
- 해당 객체를 더이상 사용하지 않는 상태에도 힙에 올라가서 오히려 메모리 낭비로 이어질 수 있음
정리
- 싱글톤 패턴은 장단점이 분명하여, 특징을 이해하고 적절하게 사용하는 것이 좋음
- 대규모 리팩토링 과정에서 싱글톤으로 객체를 처리한 후 개발이 끝난 다음에 의존성을 주입하는 형태로 가는 과정에서 사용될 수 있음
코드 예제
싱글톤 패턴의 구현에 actor를 사용함. swift 6에서 동시성 문제가 발생할 수 있어서 더 안전하게 사용하고자 함.
import SwiftUI
final actor Database {
static var shared: Database = {
return .init()
}()
private var instance: [String: String] = [:]
private init() {}
func write() {}
func read() { }
}