250x250
반응형
05-21 00:05
Today
Total
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[디자인패턴] Singleton(싱글톤) : 객체 생성을 단 한번만! 본문

CS(컴퓨터 과학)/Design Patterns

[디자인패턴] Singleton(싱글톤) : 객체 생성을 단 한번만!

billnjoyce 2020. 6. 12. 15:19
728x90
반응형
디자인패턴에의 Singleton(싱글톤)에 대하여 Swift를 기반으로 하여 살펴봅니다.

 

 

#. 구독 대상

  • 컴퓨터 및 소프트웨어 공학과 관련자
  • 소프트웨어 관련 종사자 
  • 기타 컴퓨터 공학에 관심이 있으신 분
  • 디자인패턴의 개념을 잡고 싶으신 분
  • 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
  • Swift 언어를 활용하여 디자인패턴을 공부해보고 싶으신 분들

 

 


 

 

Singleton(싱글톤)

 

Singleton(싱글톤) 패턴은 객체 생성과 관련한 디자인 패턴으로서 객체 생성을 단한번만 생성하여 어디서든 참조하여 사용할 수 있도록 도와주는 디자인 패턴입니다.

 

싱글톤은 기존 언어들에서도 많이 사용되고 있는 패턴으로서 적절하게 사용하게 되면 좋은 방법이 될 수 있으나 너무 많은 일을 하거나 많은 데이터를 공유하게 되면 외부에 강한 의존성 및 결합도로 인하여 안 좋은 설계가 될 수 있습니다.

 

 

 

 

 


 

 

 

 

구현 방식

 

Swift에서의 싱글톤 생성 방식은 크게 보면 아래의 세 가지 방식으로 사용가능합니다.

 

1) 클래스 상수(Class constant)

2) 중첩 구조체(Nested struct) 

3) dispatch_once(Swift 3.0 부터는 사용불가)

 

본 강의에서는 위의 2가지 방식에 대해서 하나씩 코드를 통하여 살펴보겠습니다.

 

 

 

 

 


 

 

 

 

 

클래스 상수(Class Constant)

 

Class 내부에서 sharedInstance 로 자체 객체 생성 및 반환

Private init() 함수 선언으로 외부 생성하지 못하도록 제한

 

class SingletonA {
    static let sharedInstance = SingletonA()

    private init() {
        print("SingletonA init");
    }
    
    func test() {
        print("SingletonA test");
    }
}

SingletonA.sharedInstance.test()
SingletonA.sharedInstance.test()
        
// Print SingletonA init
// Print SingletonA test
// Print SingletonA test
        
var a:SingletonA = SingletonA() // 컴파일 에러, 외부에서 생성 및 초기화 불가

 

 

 

 


 

 

 

 

 

중첩 구조체(Nested struct) 

 

Class 내부의 중첩 구조체에서 정적 상수 사용으로 객체 생성 및 반환

Private init() 함수 선언으로 외부 생성하지 못하도록 제한

 

class SingletonB {
    class var sharedInstance: SingletonB {
        struct Static {
            static let instance: SingletonB = SingletonB()
        }
        
        return Static.instance
    }
    
    private init() {
        print("SingletonB init");
    }
    
    func test() {
        print("SingletonB test");
    }
}

SingletonB.sharedInstance.test()
SingletonB.sharedInstance.test()
        
// Print SingletonB init
// Print SingletonB test
// Print SingletonB test

var b:SingletonB = SingletonB() // 컴파일 에러, 외부에서 생성 및 초기화 불가

 

 

 


 

 

 

이상으로 디자인 패턴에서의 Singleton(싱글톤)에 대해서 살펴보았습니다.

그럼 오늘도 즐거운 개발 되시길 바랍니다.

 

 

 

감사합니다.

 

 

 

 

 

www.slideshare.net/BillKim8/swift-singleton

 

[Swift] Singleton

Swift 소스 코드를 통한 Singleton 디자인패턴에 관한 강의 자료입니다.

www.slideshare.net

github.com/billnjoyce/Lectures/tree/master/src/designpatterns

 

billnjoyce/Lectures

Contribute to billnjoyce/Lectures development by creating an account on GitHub.

github.com

 

 

 

 


[참고 자료(References)]

 

[1] 싱글톤 패턴 : https://jerome.kr/entry/singleton-pattern?category=1114713

[2] [Swift-Design Pattern] ½Ì±ÛÅæ ÆÐÅÏ (Singleton Pattern) : http://throughkim.kr/2019/09/04/swift-singleton/

[3] [NAROTi][iOS 개발] Singleton Pattern : https://velog.io/@naroti/iOS-개발-Singleton-Pattern-q4k3uzgf0n

[4] SingleTon Pattern(swift) : https://linsaeng.tistory.com/9

[5] [Swift]Singleton 패턴 사용 방법 3가지 : http://minsone.github.io/mac/ios/singleton-in-swift

[6] Design Pattern - Singleton : https://ehdrjsdlzzzz.github.io/2018/10/28/Design-Pattern-Singleton/

[7] [SWIFT] 싱글턴(Signgleton) 패턴 : https://faith-developer.tistory.com/68

[8] [Swift 개념] Singleton Design Pattern : https://etst.tistory.com/93

[9] 싱글톤 패턴(Singleton pattern)을 쓰는 이유와 문제점 : https://jeong-pro.tistory.com/86

[10] Swift 에서 싱글톤(Singleton) 패턴 사용하기 : https://comxp.tistory.com/331

728x90
반응형
Comments