[Swift 디자인 패턴1] Singleton

2014-11-16
28 Views

Swift언어는 상당히 간단한 구문 구조를 가지고 있어 약간만 생각하면 소스코드를 줄일 수 있지만, 그래도 클래스 다이어그램을 이용하면 좋습니다. 디자인 패턴에 대해서 정리하는 이유는 디자인 패턴을 익히는 것이 아니라 Swift 언어에 대한 이해도를 높이기 위함임을 알립니다.

Singleton

Singleton(싱글톤)은 영어사전에서 보면 의미가 (네이버 영어사전 참조)

  • (단독) 개체
  • 독신자 (결혼을 안했거나 애인이 없는 사람)
  • (쌍둥이가 아닌) 외통이

Singleton 패턴은 해당 클래스의 인스턴스가 하나만 생성되지 않는 것을 보증할 수 있는 디자인 패턴입니다.

클래스 다이어그램

class-diagram-singleton

  1. 동일한 유형의 인스턴스가 private클래스 변수로 정의
  2. 생성자의 가시성이 private
  3. 동일 유형의 인스턴스를 리턴하는 getInstance()가 클래스함수로 정의

예제

[swift]

private let singleton = Singleton()

class Singleton {

private init() {

}

class func getInstance() -> Singleton {

return singleton

}

}

[/swift]

1라인: 동일한 유형의 인스턴스가 private 클래스 변수로 정의되어 있지만 Swift에서는 수가 있고 없음이 동시에 나옵니다.

  • 수: 글로벌 변수/상수를 정의할 때 메소드를 사용하여 초기화할 수 있음
  • 수없음: static 클래스변수/상수 정의할 수 없음

즉, 여기에서는 동일한 유형의 인스턴스는 글로벌 상수로 정의하고 있습니다.  그리고 스소코드는 상수 접근시 처음으로 초기화됩니다. dispatch_once가 실행됩니다. dispatch_once를 사용하는 방법은 “이니셜라이저를 가지는 전역변수를 선언하여 private로 선언“하라고 합니다.

5라인: 생성자의 가시성은 private가 보입니다. init메소드를 private하고 있고 이를 통해 이 클랫의 외부에서는 아래와 같이 인스턴스를 생성할 수 없습니다.

Singleton()

9라인: 동일 유형의 인스턴르를 리턴하는 getInstance()가 클래스 함수로 정의되어 있습니다. getInstance메소드에서 인스턴스를 리턴합니다. Init메소드가 private이기 때문에 클래스 인스턴스를 얻기 위해서는 이 메소드를 호출해야 합니다.

Swift에서 사용되는 예제

[swift]

class Singleton {
class var sharedInstance : Singleton {
struct Static {
static let instance = Singleton()
}
return Static.instance
}
}

[/swift]

 

Facebook Comments

You may be interested

Gif 애니메이션으로 로딩 구현하기
Swift 3.0
shares7 views
Swift 3.0
shares7 views

Gif 애니메이션으로 로딩 구현하기

MJ Kim - 5월 24, 2017

이번에는 MBProgressHUD 라이브러리와 FLAAnimatedImage 라이브러리를 사용하여 gif 애니메이션을 사용하는 방법을 정리해본다. Cocoapods를 사용하여 라이브러리를 추가해도 되고 Carthage를 사용해서 추가해도 된다.…

Bluetooth기반 iOS기기로 통신하기
Swift 3.0
shares5 views
Swift 3.0
shares5 views

Bluetooth기반 iOS기기로 통신하기

MJ Kim - 5월 23, 2017

제 블로그에 관심이 있는 분이 블루투스를 사용한 방법을 알려달라고 하셔서 좀더 이해하기 쉬운 방법을 고민해서 한가지 팁을 공유합니다. 블루투스(Bluetooth)로 1대1로…

Apple지도 및 구글지도 앱을 여는 방법
Swift 3.0
shares7 views
Swift 3.0
shares7 views

Apple지도 및 구글지도 앱을 여는 방법

MJ Kim - 5월 16, 2017

지도 중심에 핀을 넣기 특정 지점에서 특정지점 루트를 표시하기  Apple 지도 앱 지도 중심에 핀세워서 위치 표시 [crayon-5926d5b0649ec725069563/] 경로 표시…