1. 기본 내용
Singleton 패턴의 기본적인 정의는
한 개의 클래스로 만들어진 객체는 단 하나여야 한다입니다.
그래서 하나의 전역 객체를 만들어서
프로그램 전체에서 사용을 합니다.
기본적인 구현방법입니다.
class UserInfo {
static let shared = UserInfo()
private init(){ }
}
이렇게 만들어둔 클래스는 프로그램 전체에서 전역으로 사용이 가능합니다.
아래와 같은 방법으로 불러와서 사용이 가능합니다.
let userInfo = UserInfo.shared
2. 장단점
장점1. 전역 범위에서 데이터 전달이 편합니다.
장점2. 메모리 관리에 이점이 있습니다.
장점3. 큰 차이는 아니지만 init을 한 번 해두면 접근 시간이 줄어듭니다.
단점1. 여기저기서 다 사용하기 때문에 사용 위치를 찾기 힘든 의존성 문제가 있습니다.
단점2. 내부의 데이터를 동기적으로 사용하지 않고 동시에 사용하여 잘 못 될 우려가 있습니다.
3. 예시 코드
아래 와 같은 유저 정보를 가지고 있는 클래스를 만들었습니다.
class UserInfo {
static let shared = UserInfo()
var infoNum: Int?
var memberID: String?
var name: String?
private init(){ }
}
이것을 여러 곳에서 불러와 사용을 한다면
//A.swift
let userinfoNum = UserInfo.shared
userinfoNum.infoNum = "1234"
//B.swift
let userinfoID = UserInfo.shared
userinfoID.memberID = "Test123"
//C.Swift
let userinfoName = UserInfo.shared
userinfoName.name = "GreenTeaCat"
위와 같은 상황이 모두 이루어진 경우에는
프로그램 전체에서 UserInfo의 값으로 동일한
infoNum, memberID, name을 사용 할 수 있습니다.
그리고 하나에만 의존하면 관리에서 힘들어질 경우도 있기에
상황에 맞게 만들어서 사용하는게 편리합니다.
class UserInfo {
static let shared = UserInfo()
var infoNum: Int?
var memberID: String?
var name: String?
private init(){ }
}
class SettingInfo {
static let shared = SettingInfo()
var push: Bool?
var autoLogin: Bool?
private init(){ }
}
/////////////////////////////////////
// A.swift
let userInfo = UserInfo.shared
let settingInfo = SettingInfo.shared
userInfo.infoNum = "1234"
userInfo.memberID = "TestID123"
userInfo.name = "GreenTeaCat"
settingInfo.push = true
settingInfo.autoLogin = false
// B.Swift
let userInfo = UserInfo.shared
let settingInfo = SettingInfo.shared
print(userInfo.name ?? "") // GreenTeaCat
print(settingInfo.autoLogin ?? false) // false
'Swift개발' 카테고리의 다른 글
[Swift] DatePicker, Mode 및 Style, Locale 속성 변경하기(코드) (0) | 2022.05.24 |
---|---|
[Swift] SnapKit, Autolayout기본적인 기능 사용하기 (0) | 2022.05.20 |
[Swift]3년차 개발자의 좋은 개발자에 대한 고찰기(?) (0) | 2022.05.17 |
[Swift]class, struct 간단 비교 (0) | 2022.05.17 |
[Swift]GoogleMap API, 현재 지도뷰의 중심 좌표 가져오기 (0) | 2022.05.16 |