Swifter {Swift Developer}

메뉴

[Swift 디자인 패턴1] Singleton

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

카테고리:   Swift Books

댓글

죄송하지만 댓글은 닫혀 있습니다.