- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sort
- 정렬알고리즘
- 코테
- Design Pattern
- Algorithm
- 디자인패턴
- 프로그래머스
- swift split
- swift
- 스위프트
- swift 알고리즘
- 프로그래머스 level1
- 코딩테스트
- 디자인 패턴
- 자료구조
- 프로그래머스 swift
- 알고리즘
- datastructure
- coding test
- 정렬
- programmer
- 스위프트디자인패턴
- dart
- rxswift
- 다트
- programmers
- 프로그래머스 레벨2
- swift 코딩테스트
- 정렬 알고리즘
- 감성에세이
Bill Kim's Life...
[디자인패턴] Singleton(싱글톤) : 객체 생성을 단 한번만! 본문
디자인패턴에의 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
github.com/billnjoyce/Lectures/tree/master/src/designpatterns
[참고 자료(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
'CS(컴퓨터 과학) > Design Patterns' 카테고리의 다른 글
[디자인패턴] Prototype(프로토타입) : 클래스 정의와 생성 방식을 캡슐화, 객체 복제(Clone) (0) | 2020.06.12 |
---|---|
[디자인패턴] Factory Method(팩토리 메소드) : 객체 생성을 위한 인터페이스 제공 (0) | 2020.06.12 |
[디자인패턴] Factory(팩토리) : 객체 생성 로직을 숨긴채 객체 생성 (0) | 2020.06.12 |
[디자인패턴] Abstract Factory(추상 팩토리) : 객체 생성을 추상화하여 독립적인 인터페이스 구현 (0) | 2020.06.12 |
[디자인패턴] MVC & MVP & MVVM(iOS 개발자들을 위하여) (0) | 2020.06.11 |