[Swift 디자인 패턴1] Singleton

2014-11-16
7 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

Xcode 기능 확장(Extension) 제거하기
Xcode
shares3 views
Xcode
shares3 views

Xcode 기능 확장(Extension) 제거하기

MJ Kim - 3월 18, 2017

Mac에서 Xcode Source Editor Extension등의 기능확장을 사용하다보면 디버깅시 시스템 환경 설정의 확장이 앱에 등록되는 경우가 있다. 계속해서 목록이 남아 있기…

iOS App Store Review(앱 심사약관) 번역
Swift 3.0
shares112 views
Swift 3.0
shares112 views

iOS App Store Review(앱 심사약관) 번역

MJ Kim - 3월 15, 2017

App Store Review를 번역했다. 사실 이번에 좀 애매한 리젝을 당해서 그걸 이해하고자 정리해본다. 원문링크: https://developer.apple.com/app-store/review/guidelines/ 1. 이약관은? 1.1 앱 개발자로서 프로그램의…

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi
IoT by Raspberry Pi
shares7 views
IoT by Raspberry Pi
shares7 views

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi

MJ Kim - 3월 04, 2017

RPi1114-Raspberry Pi전원제어 모듈이 있다. 이 제품은 40Pin GPIO핀헤더에 연결하여 사용하는 모듈로 Cortax-M0마이크로컨트롤러 LPC1114를 내장하고 Raspberry Pi의 시작과 정지 순서등을 프로그래밍할…