Singleton Pattern
์ํํธ์จ์ด ๋์์ธ ํจํด ์ค ํ๋์ด๋ฉฐ ํน์ ์ฉ๋๋ก ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํด์
๊ณต๋์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๋์์ธ ์ ํ์ด๋ค.
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์ฑ๋๋๋ก ๋ณด์ฅํ๊ณ ์ด ํจํด์ ์ฌ์ฉํ๋ฉด
์ด๋์๋ ํด๋น ํด๋์ค์ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๊ฒ๋๋ค.
์ฆ, ์ฑ ์ ๋ฐ์์ ๊ณต์ ๋๋ ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ์ ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํด์ง๋ค.
Singleton Pattern ์ ํน์ง
1. ๋จ ํ๋์ ์ธ์คํด์ค
2. ์ ์ญ์ ์ ๊ทผ์
3. ์ง์ฐ ์ด๊ธฐํ
4. ์ ์ญ ์ํ ๊ด๋ฆฌ
ํน์ง์ด ์ ์๋ฟ์ง ์๋๋ค๋ฉด ์ฝ๋๋ก ๊ตฌํํด๋ณด๊ฒ ๋ค.
Singleton Pattern ์ฝ๋๋ก ๊ตฌํํ๊ธฐ
class StudentInfo {
var id : String?
var grade : Int?
var name : String?
}
ํ์์ id์ ํ๋ , ์ด๋ฆ ์ ๋ณด๋ฅผ ๋ด๋ StudentInfo ํด๋์ค์ด๋ค.
IdViewController์์๋ id๋ฅผ, GradeViewController์์๋ grade๋ฅผ, NameViewController์์๋ name์
์ ๋ ฅ ๋ฐ์ StudentInfo์ ์ ์ฅ์ ํ๋ค๊ณ ํ์.
//IdViewController
let studentinfo = StudentInfo()
studentinfo.id = "202020716"
//GradeViewController
let studentinfo = StudentInfo()
studentinfo.grade = 4
//NameViewController
let studentinfo = StudentInfo()
studentinfo.name = "๊น๊ฐํ"
์ด๋ ๊ฒ ๋๋ฉด ์ ๋ณด๋ค์ ํ๋์ ์ธ์คํด์ค์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๋๋ฐ,
๊ฐ ์ธ์คํด์ค์ ํ๋กํผํฐ์๋ง ์ ์ฅ์ด ๋ ๊ฒ์ด๋ค.
์ฐธ์กฐ๋ฅผ ํตํด์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง ์ฝ๋๊ฐ ๋๋ฌด ์ง์ ๋ถํด์ง ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฐ ์ํฉ์์ Singleton Pattern ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฑ๊ธํค ํจํด์ ์ฌ์ฉํด์ ํ ์ธ์คํด์ค์ ์ด๋ ํด๋์ค์์๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค.
๊ทธ๋ผ ์ด์ ์ฑ๊ธํค ํจํด์ ๋ง๋ค์ด๋ณด์.
class StudentInfo {
static let shared = StudentInfo()
var id : String?
var grade : Int?
var name : String?
private init() { } //init ํจ์ ์ ๊ทผ์ ์ด๋ private๋ก
}
Singleton์ ์ฅ๋จ์
์ฅ์
- ํ ๋ฒ์ ์ธ์คํด์ค๋ง ์์ฑํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์์
- ๋ค๋ฅธ ํด๋์ค๋ค๊ณผ ์์ ๊ณต์ ๊ฐ ์ฉ์ดํ๋ค.
๋จ์
- ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๋ฉด ๊ฐ๋ฐฉ ํ์ ์์น์ ์๋ฐฐํด์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ด๊ธ๋๋ค.