티스토리 뷰
싱글턴(Singleton)
싱글턴은 '특정 클래스의 인스턴스가 오직 하나임을 보장하는 객체'를 의미합니다.
싱글턴은 애플리케이션이 요청한 횟수와는 관계없이 이미 생성된(static) 같은 인스턴스를 반환합니다.
즉, 애플리케이션 내에서 특정 클래스의 인스턴스가 딱 하나만 있기 때문에 다른 인스턴스들이 공유해서 사용할 수 있습니다.
예시를 통해 살펴보겠습니다.
메타몽 소환!
간단하게 버튼에 따라서 서로 다른 페이지를 띄워주고 다시 뒤로 갈 수 있는 UI를 구성했습니다
class Singleton{
static let shared = Singleton()
var state: MetamongState?
}
enum MetamongState: String{
case metamong
case metamong_changed
}
사용될 싱글턴 클래스를 선언해 주고
//ViewController.swift
if let state = Singleton.shared.state{
switch(state){
case .metamong:
metamong.image = UIImage(named: "metamong")
label.text = "짠"
case .metamong_changed:
metamong.image = UIImage(named: "metamong-changed")
label.text = "변신완료!"
}
}
Singleton 인스턴스의 state에 따라 UI를 변경시켜줍니다.
** 저는 편의상 viewWillAppear 안에 구현을 했지만 원래 이러면 안돼요..... view의 흐름과 data는 별개로 작동을 해야합니다.. **
//SecondViewController.swift
//ThirdViewController.swift
@IBAction func buttonAction(_ sender: Any) {
Singleton.shared.state = .metamong
//or Singleton.shared.state = .metamong_changed
dismiss(animated: true, completion: nil)
}
}
띄워질 화면에서는 UIButton 의 action만 연결해 줍니다.
요로코롬 싱글턴이 잘 작동하는 것을 확인하실 수 있어요 !
Cocoa 프레임워크에서의 싱글턴 디자인 패턴
Cocoa 프레임워크에서 싱글턴 디자인 패턴을 활용하는 대표적인 클래스를 소개합니다.
싱글턴 인스턴스를 반환하는 팩토리 메서드나 프로퍼티는 일반적으로 shared라는 이름을 사용합니다.
FileManager
- 애플리케이션 파일 시스템을 관리하는 클래스입니다.
- 파일 및 디렉토리를 만들어 앱에서 관리하는 개인 데이터 파일을 저장할 수 있습니다.
- FileManager.default
URLSession
- URL 세션을 관리하는 클래스입니다.
- endpoint가 명시된 곳으로 부터 data를 주고 받을 수 있습니다.
- URLSession.shared
NotificationCenter
- 등록된 알림의 정보를 사용할 수 있게 해주는 클래스입니다.
- Observer 패턴을 적용하여 Observer에서 Event에 대한 처리를 구현하고 NotificationCenter에서 Event의 알림(+data)을 보내 콜백을 일으킵니다.
- NotificationCenter.default
UserDefaults
- Key-Value 형태로 간단한 데이터를 저장하고 관리할 수 있는 인터페이스를 제공하는 데이터베이스 클래스입니다.
- UserDefaults.standard
UIApplication
- iOS에서 실행되는 중앙제어 애플리케이션 객체입니다.
- iOS App 하나에 하나만 존재
- delegate에게 중요한 런타임 이벤트(ex: 앱 시작, 메모리 부족 경고 및 앱 종료 등) 을 알리고, 적절히 응답 할 기회을 제공합니다.
- UIApplication.shared
싱글턴 디자인 패턴은 애플리케이션 내의 특정 클래스의 인스턴스가 하나만 존재하기 때문에 객체가 불필요하게 여러 개 만들어질 필요가 없는 경우에 많이 사용합니다.
예를 들면 환경설정, 네트워크 연결처리, 데이터 관리 등등이 있습니다.
하지만 멀티 스레드 환경에서 동시에 싱글턴 객체를 참조할 경우 (Producer-Consumer 문제) 원치 않은 결과를 가져올 수 있습니다.
'iOS' 카테고리의 다른 글
[iOS] Gesture Recognizer 톺아보기 (0) | 2019.07.31 |
---|---|
[iOS] 타겟-액션 (tartget-action) 패턴 톺아보기 (0) | 2019.07.31 |
[iOS] Delegate Pattern 톺아보기 (0) | 2019.07.31 |
[iOS] 뷰의 상태변화 감지 메서드 톺아보기 (0) | 2019.07.29 |
[iOS] 모달 톺아보기 (0) | 2019.07.24 |