Swift에서의 싱글턴 패턴
한결
final class SomeSingleton {
static let shared = SomeSingleton()
private init() {} // initializer에 접근할 수 없도록 막는다.
func someMethod() {}
}actor TokenManager {
static let shared = TokenManager()
// networkManager 역시 싱글턴 패턴의 참조형 객체다.
private let networkManager: NetworkManager = .shared
private enum encryptKeys: String {
case access = "accessKey"
case refresh = "refreshKey"
}
private init() {}
func readAccessToken() throws -> String {
do {
return try readToken(by: .access)
} catch {
throw TokenErrors.notFoundTokenError
}
}
func refreshToken() async -> Bool {
do {
let access = try readAccessToken()
let refresh = try readRefreshToken()
let refreshTokenInput: RefreshTokenInput = .init(
accessToken: access,
refreshToken: refresh)
let newAccessToken = try await networkManager.request(
by: AuthEndPoint.refreshToken(input: refreshTokenInput),
of: RefreshTokenOutput.self
).accessToken
return registerAccessToken(by: newAccessToken)
} catch {
return false
}
}
...
}