Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다짐글
- class
- 회고
- weekly calendar
- 파스칼표기법
- 내_삶
- MyLife
- 제어전송문
- Switch
- 코드스니펫
- AnyObject
- 글또
- struct
- K디지털기초역량훈련
- SWIFT
- 주간 달력
- unrecognized selector sent to class
- uikit
- On branch is up to date with ' '
- 글또9기
- 바이트디그리
- copy-on-write
- 연관값
- 생명주기
- ios 개발 강의
- Git
- avaliable
- IOS
- actionSheet
- error해결
Archives
- Today
- Total
seong_hye, the developer
Swift) 문법 정리 - 싱글톤(Singleton) 패턴 본문
싱글톤 패턴이란?
메모리상에 유일하게 1개만 존재하는 객체 설계하는 패턴
한번 생성된 이후에는 앱이 종료될 때까지, 유일한 객체로 메모리에 상주
static let 변수에 접근시 유일한 객체가 생성되고 데이터가 메모리에 lazy 하게 올라감
외부에서 또다른 새로운 객체 생성을 금지하고 싶은 경우, private init 메서드로 선언(선택적)
싱글톤 패턴이 필요한 이유?
앱 구현 시에 유일하게 한개만 필요한 객체가 필요한 경우
(특정한 유일한 데이터 / 관리 객체가 필요한 경우)
class UIbirthday {
// 싱글톤 패턴
static let singleton = UIbirthday()
// 저장 속성 초기화
var screenCount: Int = 1
var screenBrightness: String = "70%"
// 객체 생성 금지
private init() {}
}
UIbirthday.singleton
var screen = UIbirthday.singleton
screen.screenBrightness // "70%"
screen.screenBrightness = "90%"
UIbirthday.singleton.screenBrightness // "90%"
사용하는 예시
ex) UserDefaults / UIApplicaiton / NotificationCenter ...
/*:
---
* 실제 사용 예시
---
*/
let iosScreen = UIScreen.main // 화면
let userDefaults = UserDefaults.standard // 한번생성된 후, 계속 메모리에 남음!!!
let application = UIApplication.shared // 앱
let fileManager = FileManager.default // 파일
let notification = NotificationCenter.default // 노티피케이션(특정 상황, 시점을 알려줌)
싱글톤 패턴의 장점과 단점은 뭐야?
장점
인스턴스가 1번만 생성되기 때문에 메모리 낭비 방지
전역 인스턴스로 사용할 수 있기 때문에 메모리 및 자원 관리가 쉬움
메모리를 할당하고 초기화하는 시간이 줄어들어 객체 접근 시간이 줄어듦
단점
생성자가 private 이기 때문에 Mock 객체를 만들어내기 어려워 테스트가 힘듦
어느곳에서나 쉽게 접근이 가능해 의존성이 생김
멀티 스레드 환경에서 객체가 2개 생성되는 위험 발생
참고자료
https://trumanfromkorea.tistory.com/36
참고자료)
'IOS' 카테고리의 다른 글
Swift) 문법정리 - 확장(Extension) (0) | 2022.10.18 |
---|---|
Swift) 문법 정리 - COW(Copy-On-Write) (0) | 2022.08.02 |
Swift) 문법 정리 - self vs Self (0) | 2022.07.19 |
Swift) 화면전환 방식 (0) | 2022.07.19 |
[ios 개발 강의] Swift - UINavigationController (0) | 2022.07.19 |
Comments