본문 바로가기
iOS/Swift

Swift) Singleton

by Jiseong 2022. 2. 12.

Singleton

싱글톤은 특정 클래스의 인스턴스가 단 하나임을 보장하는 객체를 말한다.

 

싱글톤은 애플리케이션이 몇번을 요청하든 이미 생성된 동일한 인스턴스를 반환한다.

 

프로그램 전체에 단 하나의 전역 인스턴스를 만들어놓고, 어디서든 이 하나의 인스턴스만 접근, 사용할 수 있게 하면 된다.

class SingleTonExample {
    static let shared = SingleTonExample()
    var testNumber: Int = 0 
    private init() { } // 객체 생성, 초기화 막음
}

let test = SingleTonExample.shared
test.testNumber = 10 // reference type (class)
print(SingleTonExample.shared.testNumber) // 10

자기 자신(클래스)의 인스턴스를 스스로 만들고, static을 이용하여 전역적으로 사용할 수 있게 만든다.
그리고 initializer에 접근제어자 private를 붙여 다른 곳에선 SingletonExample을 초기화, 즉 인스턴스로 만들 수 없다.

이렇게 만들면 해당 프로그램 전체에서 SingletonExample 인스턴스는 오로지 단 한개인 것이다.

Several Cocoa framework classes are singletons. They include NSFileManager, NSWorkspace, and, in UIKit, UIApplication and UIAccelerometer. The name of the factory method returning the singleton instance has, by convention, the form sharedClassType. Examples from the Cocoa frameworks are sharedFileManager, sharedColorPanel, and sharedWorkspace.

위는 Cocoa 프레임워크에서 싱글톤 디자인 패턴인 예를 알려주고있다.

싱글톤 패턴 사용시 장점

  • 메모리를 단 한번만 사용한다.
    • 해당 객체는 단 한번만 만들어지고, 전역 선언이 되어있기때문에, 메모리를 한 곳만 이용하고, 필요하면 그 하나의 메모리에 접근하여 사용하는 것이다.
  • static(전역) 범위이기에 데이터 전달이 쉬워진다.
    • 어디서든 접근할 수 있기때문에, 어떤 상태나, 데이터를 공유하기에 적절하다.
  • 객체 접근 시간이 줄어든다.
    • 객체를 한번만 만들어놓고 접근하는 방식이므로, 객체를 생성할 때 메모리를 할당하고, 초기화하는 과정, 시간이 줄어든다.

싱글톤 패턴 사용시 단점

  • 의존성을 만들어낸다.
    • 같은 프로그램 내 어느곳에서든 쉽게 접근할 수 있기에 너무 많이 사용하게된다면, 어떤 객체와 연결이 되어있는지 파악하기 힘들다.
      -> 수정, 테스트가 어려워짐
    •  

https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html

 

Singleton

Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. Singleton A singleton class returns the same instance no matter how many times an application

developer.apple.com

https://medium.com/hcleedev/swift-singleton-싱글톤-패턴-b84cfe57c541

 

Swift: Singleton, 싱글톤 패턴

Singleton 패턴은 무엇인지, 장단점을 알아보고, Semaphore를 이용한 사용 예시까지 살펴보자.

medium.com

 

'iOS > Swift' 카테고리의 다른 글

Swift) Struct vs Class  (0) 2022.02.12
Swift) Notification, NotificationCenter  (0) 2022.02.12
Swift) KVO(Key-Value-Observing)  (0) 2022.02.12
일반화, 추상화, 캡슐화, 은닉화, 암호화  (0) 2022.02.12
Swift) return에 대한 의문  (0) 2022.02.12

댓글