HIT해
[Swift 기초문법 - 47] Singleton 패턴 본문
728x90
Singleton 패턴이란?
스위프트에서 객체를 생성하는 대표적인 방법론
애플리케이션이 시작될 때 객체의 인스턴스를 최초 1회만 생성하여 사용하는 디자인 패턴이다!
메모리를 하나만 쓰는 것이 특징이다.
일반적인 객체 생성 사용 예시
class Pet{
}
let Pet1 = Pet()
let Pet2 = Pet()
이렇게 생성했을때 Pet1과 Pet2는 다른 메모리 주소를 할당받는다.
그럼 메모리를 두배로 차지하기에 비효율적이라고 말할 수 있다.
Singleton 패턴 사용 예시
final class Pet{
static let shared = Pet()
private init(){}
}
let Pet1 = Pet.shared
let Pet2 = Pet.shared
이때 Pet1과 Pet2는 같은 주소를 바라보게된다.
그말은 즉슨 Pet인스턴스의 변수가 변경되면 Pet1과 Pet2 모두 변경된 값에 접근할 수 있게 된다.
final class Pet{
static let shared = Pet()
private init(){}
var name : String = "흰둥이"
}
Pet.shared.name = "도라에몽"
let Pet1 = Pet.shared
let Pet2 = Pet.shared
// 둘다 도라에몽
보통 이런 Sington패턴에서는 final class를 주로 사용하는데 싱글톤의 본질적인 특성을 보호하기 위해 상속을 막아야하기 떄문이다.
싱글톤 패턴의 목적은 애플리케이션 전역에서 단 하나의 인스턴스만을 유지하는 것이기에 'final class'를 사용하면 이 목적을 더 안전하고 더 명확하게 구현할 수 있다.
정리하자면
장점
- 인스턴스를 최초 1회만 생성하므로 메모리와 성능 측면에서 효율이 좋다
- 클래스 간 데이터 공유가 쉽다
- 인스턴스가 1개라는 것을 보증받는다.
- (Thread Safe) : 여러 스레드에서 어떤 객체에 대해 동시에 접근이 이루어져도 프로그램의 동작에 이상이 없음을 뜻함
단점
- 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 개방-폐괘 원칙(OCP)를 위배하기 된다
- 따라서 수정과 테스트가 어려워진다.
- 싱글톤을 위한 코드를 구현해야한다
- 스위프트상에서는 쉽게 구현이 가능하다
'Swift > Swift 기초문법' 카테고리의 다른 글
[Swift 기초문법 - 49] 프로토콜 조건 적용 (0) | 2024.08.19 |
---|---|
[Swift 기초문법 - 48] Toggle (0) | 2024.08.19 |
[Swift 기초문법 - 46] Open (0) | 2024.08.18 |
[Swift 기초문법 - 45] Range (0) | 2024.08.18 |
[Swift 기초문법 - 44] static func, final class func (0) | 2024.08.18 |