-
[Swift] 싱글톤(Singleton) 정리Swift 2023. 3. 6. 16:21
시작하며
UIKit으로 앱을 만드는 강의를 들으면서 class를 singleton으로 만들어서 작업하는 것을 배웠다. 대충 어떤 느낌인지는 알 것 같은데 왜 Singleton으로 사용하는지 Singleton이 무엇인지 다시 정리하려고 기록해두려 한다.
Singleton 이란
싱글톤 패턴은 어떤 용도로 객체를 생성하는데 여러 인스턴스가 아닌 하나의 객체를 공용으로 사용하는 디자인 유형이다.
아래와 같이 코드가 있는 경우 각각의 컨트롤러에서 저장되는 정보들이 다른데 이 정보를 서로 보내줘서 하나의 정보를 만들 생각을 하니 벌써 피로해진다. 이럴 때 하나의 인스턴스만 만들어 둔 뒤 타입 변수로 두어 어디서든 공동된 객체에 접근하게 하면 이런 정보 전달에 대한 피로감을 줄일 수 있다.
/* Singleton X 3개의 컨트롤러에서 각각 name, age, email을 받는 경우 각각의 인스턴스를 넘겨줘서 하나의 인스턴스를 만든다. */ class Person { var name: String? var age: Int? var email: String? } /* Singleton ⭐️ */ class Person { var name: String? var age: Int? var eamil: String? static let shared = Person() private init(){} } //접근할 경우 class ViewController: UIViewController { ... Person.shared.name = newName ... }
Singleton 만들기
위에서 만들었던 코드를 다시 보면
1. 똑같이 변수를 선언해준다.
2. 하나의 인스턴스를 만들어서 shared 변수에 할당한다. (이 shared를 통해 다른 객체에서 접근)
3. private init(){} 을 통해 외부에서 다른 인스턴스를 만드는 것을 방지한다.
4. Person.shared를 통해 싱글톤 인스턴스를 가져와서 사용한다.class Person { var name: String? var age: Int? var eamil: String? static let shared = Person() private init(){} } //접근할 경우 class ViewController: UIViewController { ... Person.shared.name = newName ... }
Singleton을 사용하는 이유
- 하나의 인스턴스만 만들어서 메모리를 아낄 수 있다.
- 여러개의 클래스들과 소통하기 쉽다.
- Networking 등 여러 인스턴스가 필요없는 객체를 만들 때 사용한다.
- Swift에서 Thread-safeg하게 여러곳에서 동시에 선언해도 앱 내에서 한번만 선언할 수 있게 막아준다.
- 단, 해당 Singleton 객체가 다른 클래스들과 너무 밀접하게 연관될 경우 개방-폐쇄 원칙(객체지향)에 어긋나므로 주의해야한다.
Reference
https://babbab2.tistory.com/66
Swift) 싱글톤 패턴(Singleton Pattern)
안녕하세요 :) 소들입니다 이번 포스팅에선 싱글톤 패턴이 무엇이고, Swift에선 어떻게 사용되는지에 대해 알아보려고 해요!!! 왜 네트워크 하다가 갑자기 SingleTon이냐 하면 내 마음임 모든 포스팅
babbab2.tistory.com
[iOS/Swift] Singleton 패턴 사용의 이유와 사용 방법
Singleton(싱글톤) 패턴은 무엇이고 언제 사용할까 안녕하세요! 오늘은 싱글톤 패턴에 대해서 들고 왔습니다. 앱 개발 초기부터 많이 사용하게 되는 패턴이라 익혀두면 아주 좋은데요! 사용 방법도
ios-developer-storage.tistory.com
'Swift' 카테고리의 다른 글
[Network] URL로 네트워크 요청하기 (0) 2023.03.12 [Swift] @escaping 키워드와 클로저 (0) 2023.03.11 [Swift] Xcode .gitignore 파일 추가하기 (0) 2023.03.01 [Swift] 메모리 참조 strong, weak, unowned 비교 (0) 2023.02.09 [Swift] Swift 기본 문법 정리 5: Property (0) 2023.02.01