[Swift 디자인 패턴1] Singleton

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

모바일 앱 아키텍처
Swift
shares4 views
Swift
shares4 views

모바일 앱 아키텍처

MJ Kim - 4월 22, 2017

이 내용은 나름대로 개발해본 내용을 토대로 정리해본 모바일 앱 아키텍처에 대한 내용이다. 이를 정리한 이유는 오래된 아키텍처부터 최근 아키텍처까지 정리해보고…

시간차를 얻는 Date Extension
Swift 3.0
shares6 views
Swift 3.0
shares6 views

시간차를 얻는 Date Extension

MJ Kim - 4월 12, 2017

사용자가 남길 내용에 대한 시간표시를 할 때 일정한 시간차를 표현해주는 경우가 있어 이에 대한 Date Extention을 정리해 보았다. [crayon-58fb0ec001130285530940/]  

Swift 3.1에서 없어진 문법 정리
Swift 3.0
shares34 views
Swift 3.0
shares34 views

Swift 3.1에서 없어진 문법 정리

MJ Kim - 3월 31, 2017

Swift언어는 무엇인가 나올때마다 없어지는 것들이 있어, Swift 3.1에서 컴파일할 수 없게 된 문법내용을 정리했다. switch문을 사용하여 enum에서 protocol을 여러가지 패턴으로…