[์ค์ํํธ ๋์์ธํจํด] ์ฑ๊ธํค ํจํด(Singleton Pattern)
์ฑ๊ธํค ํจํด(Singleton Pattern)
The singleton pattern ensures a class has only one instance and provides a global point of access to it.
์ค๋์ ํญ์ ๋ ผ๋์ ์ค์ฌ์ ์๋ ์ฑ๊ธํค ํจํด์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค..! ์ฑ๊ธํค ํจํด์ ๊ฐ์ฒด์ ์ธ์คํด์ค๊ฐ ํ ๋ฒ ๋ง๋ค์ด์ง ์ดํ์๋ ํด๋น ๊ฐ์ฒด์ ๋ํ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์ ๋ ๋ง๋ค์ด์ง์ง ์๋๋กํ๋ ๋์์ธ ํจํด์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์์ญ์์ ํด๋น ์ธ์คํด์ค์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
์ฑ๊ธํค ํจํด์ ์๋ฆฌ
์ฑ๊ธํค ํจํด์ ํต์ฌ์ ๋จ ํ๋์ ์ธ์คํด์ค๋ง ์ฒ์์ ์์ฑํ๊ณ , ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ ๊ฒ์ ์์ต๋๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ ํ ์ ์์๊น์?
๋จผ์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์์ฑ์๋ฅผ ์ธ๋ถ๋ก๋ถํฐ ์จ๊ฒจ์ผ ํฉ๋๋ค. ์ด๊ฑด private ์ ๊ทผ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ์ฃ .
import Foundation
class Singleton {
private init() {}
}
์ด๋ ๊ฒ private์ผ๋ก ์์ฑ์๋ฅผ ์จ๊ธฐ๋ฉด, ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๊ณ ํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด์ ์ธ๋ถ์์ ์๋ก์ด ์ธ์คํด์ค๋ ์ ๋ ์๋ก ์์ฑํ ์ ์์ต๋๋ค. ๋์ ๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ํด์ผํ๋๋ฐ์, ์ด๋ฅผ ์ํด์ ๋ด๋ถ ์์ฑ์์ ์ ๊ทผํ ์ ์๋๋ก ํ์ ํ๋กํผํฐ๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
class Singleton {
static let shared = Singleton()
private init() {}
}
ํ์ ์ ์ฅ ํ๋กํผํฐ๋ lazyํ ํน์ฑ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์ฒ์ shared ๋ณ์๋ฅผ ํธ์ถํ ๋, ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด์ shared์ ์ ์ฅ๋์ฃ . ๊ทธ๋ฆฌ๊ณ shared๋ let ํค์๋์ ํจ๊ป ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ฅ๋ ์ฑ๊ธํค ์ธ์คํด์ค๋ฅผ ๊ณ์ํด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ shared๋ฅผ ํตํด ํญ์ ํ๋์ ์ธ์คํด์ค์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
class Singleton {
static let shared = Singleton()
var state = true
private init() {}
}
class A {
let singleton = Singleton.shared
func printState() {
print(singleton.state)
}
func updateState() {
singleton.state.toggle()
}
}
class B {
let singleton = Singleton.shared
func printState() {
print(singleton.state)
}
func updateState() {
singleton.state.toggle()
}
}
let a = A()
let b = B()
a.printState() // true
b.printState() // true
a.updateState()
a.printState() // false
b.printState() // false
๊ทธ๋ผ ์ด๋ ๊ฒ ํ๋์ ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ฒด์์ ๊ณต์ ํ๋ฉด์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ฑ๊ธํค์ ์ํฐ ํจํด?
์ฑ๊ธํค ํจํด์ ์์ฃผ ์ํฐ ํจํด์ผ๋ก ๋ถ๋ฆฌ๋๋ฐ์, ๋ ผ๋์ ํต์ฌ์ ๋จ์ง ์ฑ๊ธํค ํจํด์ด ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ์ ์ญ์์ ์ฑ๊ธํค ์ธ์คํด์ค์ ์ ๊ทผํด ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค๋ ์ ์ ๋๋ค. ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์๋ ๋ชจ๋ ์ฝ๋๊ฐ ์ธ์คํด์ค์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ณ , ์ด๋ฐ ํน์ง์ ๊ฐ๋ฐ์๊ฐ ์ธ์งํ์ง ๋ชปํ๋ ์๊ฐ์ ์ธ์คํด์ค์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๋ถ๋ถ๋ ๋ฌธ์ ๊ฐ ์๋๊ฒ ์๋์์. ๋ง์ฝ ์ด๋ค ํ๋ก๊ทธ๋จ์์ ํ๋์ ๊ฐ์ฒด๋ง์ ์ฌ์ฉํ๋ค๊ฐ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ๊ฐ์ฒด์ ์ธ์คํด์ค๊ฐ ๊ตฌ๋ถ๋์ด์ ํ์ํ๋ค๋ฉด ์ด๋จ๊น์? ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋ง์ด ๋์ง ์๊ฒ ์ฃ . ๊ทธ๋ ๋ค๋ฉด ์ฑ๊ธํค์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ๊ทธ๋ผ ์ด ์ธ์คํด์ค์ ์ ๊ทผํ๋ ๋ชจ๋ ์์ญ์ ์ฝ๋๋ฅผ ์์ ํด์ฃผ์ด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ ์ดํ์ ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ์ํฉ์ด ์๊ธด๋ค๋ฉด ์ต์ ์ ์ํฉ์ด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
๋ฐ๋ผ์, ํด๋น ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ๊ฒ์ด ํ์คํ๋ค๋ฉด ์ฑ๊ธํค ํจํด์ ์ ํํด๋ ๋๊ฒ ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก 100% ํ์ ์ ๊ฐ์ง ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฑ๊ธํค ํจํด์ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ์ฑ๊ธํค ํจํด์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋๋ก ํ๋๊น์.
๋ง๋ฌด๋ฆฌ
์๋ง ๋์์ธ ํจํด ํฌ์คํธ ์ค ๊ฐ์ฅ ์งง์ ํฌ์คํธ๊ฐ ๋์ง ์์๊น ์ถ๋ค์ใ ใ
์ฑ๊ธํค ํจํด์ ๊ต์ฅํ ํธํ๋ค๋ ์๊ฐ์ ๋ง์ด ํ๊ณค ํด์. ์ํ๋ ์ด๋์๋ ๊ณต์ ๊ฐ ๋๊ณ , ์ธ์คํด์ค๋ฅผ ์ด๋ฆฌ์ ๋ฆฌ ์ ๋ฌํ ํ์๋ ์๊ตฌ์. ํ์ง๋ง ์ดํ์ ํ๋ก๊ทธ๋จ์ด ์ธ์ ๋ ์ง ํ์ฅ๋ ์ ์๋ค๋ ์ ์์ ์๊ฐํด๋ณด๋ฉด, ์กฐ๊ธ์ ๋ณต์กํ๊ณ ๋ฒ๊ฑฐ๋กญ๋๋ผ๋ ์ธ์คํด์ค์ ๋ํ ์ ๊ทผ์ ์ค์ฝํ ๋จ์๋ก ์ ํํ๊ณ ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๋ ๊ฒ ๋ ์ข๊ฒ ์ฃ . ๋ฌด์กฐ๊ฑด ์ฑ๊ธํค์ ๋ฐฐ์ฒํด์ผํ๋ค๋ ๊ฒ์ ์ ๋ ์๋์ง๋ง ์ฌ์ฉ์ ์์ด์ ์ถฉ๋ถํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผํ๋ ๋์์ธ ํจํด์ธ ๊ฒ ๊ฐ์ต๋๋ค!
์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
'๐ฎ ์จ-์์ค > ๐ ๋์์ธํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote