* Singleton (싱글톤 패턴)
- 어떤 클래스의 인스턴스가 오직 하나만 생성되고, 어디서든지 그 인스턴스에 접근할 수 있도록하는 디자인 패턴
- 전역 변수를 사용하지 않고 하나의 공유 인스턴스를 사용하여 데이터를 관리하고, 다른 객체들이 이 인스턴스를 공유하여 사용
- 메모리를 인스턴스 하나에만 할당하여 공유하며 사용하므로 메모리를 낭비하지 않음
장점
- 전역적인 접근성 : 어디서든 동일한 인스턴스에 접근 가능 -> 데이터 공유 및 상태 유지에 용이, 객체 간 일관된 동작 보장
- 리소스 공유 : 인스턴스는 하나이므로, 매번 리소스를 새로 할당하는 비용을 절약 가능
단점
- 의존성과 테스트 어려움 : 싱글톤은 전역적인 접근성을 가짐 -> 다른 객체들에 대한 의존성 강화 및 테스트 어려워짐 (의존성 주입을 통해 문제를 완화할 수 있지만, 의존성 관리를 복잡하게 만듦)
- 상태 공유와 동시성 문제 : 여러 객체가 인스턴스를 공유할 때 상태 변경에 대한 동기화 문제 발생 -> 적절한 동기화 메커니즘 필요
- 코드 복잡성 증가 : 인스턴스의 생성과 공유를 관리하는 로직이 추가되므로 코드가 복잡해지고 가독성이 저하됨
* 싱글톤 패턴 사용 전 메모리 공간
import UIKit
class SingletonViewController: UIViewController {
// Pet 클래스 정의
class Pet{
}
override func viewDidLoad() {
super.viewDidLoad()
// Pet 클래스 생성
let myCat = Pet()
let myDog = Pet()
}
}
- 싱글톤 패턴을 구현하지 않고 Pet 클래스는 단순히 클래스 정의
- myCat, myDog이라는 두 개의 Pet 인스턴스를 생성
- 두 인스턴스의 주소 값이 다른 것을 확인 할 수 있음
* 싱글톤 패턴 적용
import UIKit
class SingletonViewController: UIViewController {
// Pet 클래스 정의, final : 상속 불가능
final class Pet{
static let shared = Pet()
private init () {}
var name : String = "짱아"
}
override func viewDidLoad() {
super.viewDidLoad()
// Pet 클래스 생성
let myCat = Pet.shared
let myDog = Pet.shared
print("myCat : ", myCat.name)
print("myDog : ", myDog.name)
}
}
- final을 사용하여 상속이 안 되도록 설정
- Pet 클래스의 내부에 객체를 생성하여 shared라는 정적 상수를 통해 싱글톤 인스턴스에 접근
- private init() 메서드를 통해 외부에서 인스턴스 생성을 막음
- Pet 클래스 내 name 인스턴스 변수는 myCat, myDog에서 동일한 값을 가짐 -> 인스턴스를 공유하기 때문
- 마찬가지로 싱글톤을 사용하면 인스턴스 객체의 주소 값이 동일함
참고)
https://babbab2.tistory.com/66
Swift) 싱글톤 패턴(Singleton Pattern)
안녕하세요 :) 소들입니다 이번 포스팅에선 싱글톤 패턴이 무엇이고, Swift에선 어떻게 사용되는지에 대해 알아보려고 해요!!! 왜 네트워크 하다가 갑자기 SingleTon이냐 하면 내 마음임 모든 포스팅
babbab2.tistory.com
https://www.youtube.com/watch?v=bhyCUykI4Dg
'Swift' 카테고리의 다른 글
Swift - 문서화 (퀵헬프 표시 주석 작성 방법) (0) | 2023.07.09 |
---|---|
Swift - 디자인 패턴(생성 관련) - 빌더 패턴 (0) | 2023.07.08 |
Swift - 소프트웨어 아키텍처 (MVP, VIPER) (1) | 2023.07.06 |
Swift - 소프트웨어 아키텍처(MVC, MVVM) (1) | 2023.07.02 |
Swift - UIAlertController (경고, 알림 등 팝업 창 표시) (1) | 2023.07.01 |