์ต๊ทผ ํ๋ก์ ํธ์์ ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํด๋ณด๊ฒ ๋์๋๋ฐ์!
์ฑ๊ธํค ํจํด์ ์ ๋๋ก ์๊ณ ์ฐ๊ณ ์ ์ฑ๊ธํค ํจํด์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
Singleton์ ์ ์, ์ฌ์ฉ์ด์ , ์ฌ์ฉ๋ฐฉ๋ฒ ์์ผ๋ก ์ ๋ฆฌํด๋๊ฐ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
์ฑ๊ธํค ํจํด(Singleton Pattern)์ด๋?
์ํํธ์จ์ด ๋์์ธ ํจํด์์ ์ฑ๊ธํด ํจํด(Singleton pattern)์ ๋ฐ๋ฅด๋ ํด๋์ค๋, ์์ฑ์๊ฐ ์ฌ๋ฌ ์ฐจ๋ก ํธ์ถ๋๋๋ผ๋ ์ค์ ๋ก ์์ฑ๋๋ ๊ฐ์ฒด๋ ํ๋์ด๊ณ ์ต์ด ์์ฑ ์ดํ์ ํธ์ถ๋ ์์ฑ์๋ ์ต์ด์ ์์ฑ์๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค. ์ด์ ๊ฐ์ ๋์์ธ ์ ํ์ ์ฑ๊ธํด ํจํด์ด๋ผ๊ณ ํ๋ค. [์ถ์ฒ] ์ํค๋ฐฑ๊ณผ
์ฑ๊ธํค์ ๋์์ธ ํจํด ์ค ์์ฑ ํจํด์ ํด๋นํ๋ ๋์์ธ ์ ํ์ผ๋ก,
ํด๋์ค๊ฐ ์ฌ๋ฌ ์ฐจ๋ก ํธ์ถ๋๋๋ผ๋ ๋ฑ ํ ๊ฐ์ฒด๋ง ์์ฑ๋๊ธฐ ๋๋ฌธ์
๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํ์ฌ ์ฌ๋ฌ ๊ณณ์์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ ๋๋ค.
์ฑ๊ธํค. ์ ์ฐ๋๊ฑด๋ฐ?
์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ญ๊น์?
์์ ๋ก ๋ณด๋๋ก ํฉ์๋ค!
์๋์ ๊ฐ์ ์ ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํด๋์ค๊ฐ ์๋ค๊ณ ํด๋ด ์๋ค.
class UserInfo {
var id: String?
var pw: String?
var name: String
}
๋ง์ฝ, A ViewController์์ name, B ViewController์์ id, C ViewController์์ pw ์ ๋ณด๋ฅผ ๋ฐ์์
์ด ํด๋์ค(UserInfo)์ ์ ์ฅํด์ผ๋๋ค๋ฉด
// A ViewController
let userInfo = UserInfo()
userInfo.name = "Jane"
// B ViewController
let userInfo = UserInfo()
userInfo.id = "janechoi123"
// C ViewController
let userInfo = UserInfo()
userInfo.pw = "123456"
์์ ๊ฐ์ด ์ธ ๊ฐ์ Viewcontroller์์ UserInfo ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฐ ๋ฐ๋ก ์์ฑํ์ฌ id, pw, name ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฒ๋ฉ๋๋ค.

์ด๋ ๊ฒ ๋๋ฉด, ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ์ธ์คํด์ค(instance)์ ์ ๋ณด๊ฐ ๋ฐ๋ก ์ ์ฅ์ด ๋๊ฒ ์ฃ ?
๊ทธ๋ ์ง๋ง, ์ฐ๋ฆฌ๋ ํ๋์ ์ธ์คํด์ค์ ๋ชจ๋ ์ ๋ณด(id, pw, name)๊ฐ ์ ์ฅ๋๋ ๊ฒ์ ์ํฉ๋๋ค.
์ด๋ด ๋! ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํด์ ์ด ํด๋์ค์ ๋ํ ์ธ์คํด์ค๋ ์ต์ด ์์ฑ ์์ ์ ์ญ์ผ๋ก ์ ์ฅํด๋๊ณ ,
๊ทธ ์ดํ์ ์ด ์ ์ญ ์ธ์คํด์ค(ํ๋๋ง ์กด์ฌ)์ ์ ๊ทผํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.

์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ ์ธ์คํด์ค์ ์ฌ๋ฌ ๊ณณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ์ด ๋ฐ๋ก ์ฑ๊ธํค์ ๋๋ค!
์ฌ๊ธฐ์ ์ ์ญ๋ณ์์ ๊ฐ์ ์ญํ ์ ํ๋๋ฐ ์ ๊ตณ์ด ์ฑ๊ธํค์ ์จ์ผํ๋? ๋ผ๋ ์๋ฌธ์ด ๋ค ์๊ฐ ์์ํ ๋ฐ์,
์ฑ๊ธํค์ ๋ฉ๋ชจ๋ฆฌ๋ฉด์์ ์ฅ์ ์ด ํฝ๋๋ค.
๋ง์ฝ์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน๋ ํด๋์ค๊ฐ ์์ ๋, ์ ์ญ ๋ณ์๋ก ์ ์ธํ๊ฒ ๋๋ฉด ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง, ์ฑ๊ธํค์ ์์ฑ ์์ ๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ฌ์ฉํ์ง ์์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํ์ง๋ง, ์ด๊ฒ์ด ๋จ์ ์ด ๋ ์๋ ์๊ฒ ์ฃ ??
์ด๋ ๊ณณ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง ์ ์๊ธฐ ๋๋ฌธ์ ํด์ง๊ฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
๋ํ ํ๋์ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ด ์ปค์ง ํ๋ฅ ์ด ๋์ต๋๋ค.
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฑ ์ ์ญ์์ ์ ๊ทผํ ์ ์๋ค๋ฉด ๊ฐ๊ธฐ ๋ค๋ฅธ ์ค๋ ๋์์ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํฌ ์ ์์ด ๋์์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์๋ ์์ต๋๋ค. (์ ๋ ์๊ณ ์ถ์ง ์์์ต๋๋ค.. ์ด๋ฌํ ๋จ์ ๋๋ฌธ์ ์ํฐํจํด์ด๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค)
๊ทธ๋์ ์ด๋ป๊ฒ ์ฐ๋๊ฑด๋ฐ?
์ด์ ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํด๋ด ์๋ค!
1. static ํ๋กํผํฐ๋ก Instance ์์ฑ
class UserInfo {
static let shared = UserInfo()
var id: String?
var pw: String?
var name: String?
}
๋จผ์ , ์ ์ญ์ผ๋ก ์ ์ฅ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
static ํค์๋๋ฅผ ์ด์ฉํด ํด๋์ค ์์ ์ธ์คํด์ค(instance)๋ฅผ ์ ์ฅํ ํ๋กํผํฐ๋ฅผ ํ๋ ์์ฑํด์ค๋๋ค.
(์ฑ๊ธํค ํจํด์ ์ฐธ์กฐ ํ์ ์๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ class๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค.)
2. init() private์ผ๋ก ์ ๊ทผ์ ์ด
class UserInfo {
static let shared = UserInfo()
var id: String?
var pw: String?
var name: String?
private init() { }
}
์์ฑ์์ธ init()์ private์ผ๋ก ์ ๊ทผ์ ์ด ํด์ค๋๋ค.
์ธ๋ถ์ ์ ๊ทผ์ ์ฐจ๋จ์์ผ์ UserInfoํด๋์ค์ shared ์ธ์คํด์ค๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ ํํ๋ ๊ฒ์ด ์ฑ๊ธํค ํจํด์ ๋๋ค.
์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค ์ ์์ต๋๋ค!
๊ทธ๋ ๋ค๋ฉด ์ธ๋ถ์์๋ ์ด๋ป๊ฒ ์ ๊ทผํ ๊น์?
3. Singleton Class ์ ๊ทผ ๋ฐฉ๋ฒ
์์ฑํด์ฃผ์๋ static ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค.
์ด๋ ํด๋์ค์์๋ shared๋ผ๋ static ํ๋กํผํฐ๋ก ์ ๊ทผํ๋ฉด, ํ๋์ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ด ๋ค๋ฅธ ViewController์์ ๋์ผํ ์ธ์คํด์ค์ ์ ๊ทผํด ๊ฐ์ ์ ํด์ค ์๋ ์๊ณ ,
// A ViewController
let userInfo = UserInfo.shared
userInfo.name = "Jane"
// B ViewController
let userInfo = UserInfo.shared
userInfo.id = "janechoi123"
// C ViewController
let userInfo = UserInfo.shared
userInfo.pw = "123456"
์ด๋ ๊ฒ ์ ์ฅ๋ ๊ฐ์ ๊ฐ์ ธ์ ์ฌ์ฉํด์ค ์๋ ์์ต๋๋ค.
// D ViewController
let userInfo = UserInfo.shared
print(userInfo.name ?? "")
์ฐธ๊ณ ์๋ฃ
https://ko.wikipedia.org/wiki/์ฑ๊ธํด_ํจํด
http://blog.whatifill.com/blog/design-patterns-with-swift
https://babbab2.tistory.com/66
https://ggasoon2.tistory.com/5
'๐ iOS > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] ๊ตฌ์กฐํจํด - Adapter Pattern (0) | 2022.05.20 |
---|