[Design Pattern] ์ฑ๊ธํคํจํด (Singleton pattern)
์ฑ๊ธํคํจํด์ด๋?
๊ฐ์ฒด์ ์ธ์คํด์ค๊ฐ ์ค์ง 'ํ๋'์ ์ธ์คํด์ค๋ง ์์ฑํ์ฌ ์ฌ์ฉํ๋ ๋์์ธ ํจํด
์์ฑ์๊ฐ ์ฌ๋ฌ๋ฒ ํธ์ถ๋๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋๋ฐ,
์ฑ๊ธํคํจํด์ ์ด์ฉํ๋ฉด ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ์ค์ ๋ก ์์ฑ๋๋ ๊ฐ์ฒด๋ ํ๋์ด๋ฉฐ, ์ต์ด๋ก ์์ฑ๋ ์ดํ์ ํธ์ถ๋ ์์ฑ์๋ ์ด๋ฏธ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํ์ํจ๋ค.
(swift์์๋ ์์ฑ์๋ฅผ private๋ก ์ ์ธํ์ฌ ์๋ก์ด ๊ฐ์ฒด์ ์ถ๊ฐ์ ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ค.)
static let์ผ๋ก ์์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ ์ญ๋ณ์์ ํ ๋นํ๋ค. - ๋ฐ์ดํฐ ๊ณต์
๋ณ์๋ก ์ ๊ทผํ๋ ์๊ฐ lazyํ๊ฒ ๋์ํ์ฌ, ๋ฉ๋ชจ๋ฆฌ(๋ฐ์ดํฐ ์์ญ)์ ์ฌ๋ผ๊ฐ๋ค.
์ฌ์ฉ ์ํฉ
- ํ๋ก๊ทธ๋จ ๋ด์์ ํ๋์ ๊ฐ์ฒด๋ง ์กด์ฌํด์ผ ํ ๋
- ํ๋ก๊ทธ๋จ ๋ด์์ ์ฌ๋ฌ ๋ถ๋ถ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉํด์ผํ๋ค.
์ฅ์
๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋ฐ์์ผํ์ง๋ง, ์ฑ๊ธํค ํจํด์ ์ด์ฉํ๋ค๋ฉด ํ๋์ ๊ฐ์ฒด๋ง ๋ง๋ค์ด๋ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
๋ฐ์ดํฐ๊ณต์
- ์ฑ๊ธํค ์ธ์คํด์ค๋ ์ ์ญ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค์ด ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ ํด๋์ค์ ์ธ์คํด์ค์์ ์ฑ๊ธํค ์ธ์คํด์ค์ ๋ฐ์ดํฐ์ ๋์์ ์ ๊ทผํ๊ฒ ๋๋ฉด ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋
- ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ๋ค์ ์ฌ์ฉํ ๋๋, ์ด๋ฏธ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ํ์ฉํ๋ฏ๋ก ์๋ ์ธก๋ฉด์์ ์ด์ ์ด ์๋ค
๋จ์
๊ฐ๋ฐฉ-ํ์ ์์น ์๋ฐฐ
- ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ์ํฌ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํด๋์ค์ instance๋ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ ธ "๊ฐ๋ฐฉ - ํ์"์์น์ ์๋ฐฐ ( ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น ์ด๊ธ๋จ)
์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ
Swift Singleton์ ํน์ง
static์ ์ฌ์ฉํด ํ์ ํ๋กํผํฐ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด, ์ ๊ทผํ๋ ์๊ฐ lazy (์ด๊ธฐํ) ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Singleton Instance๊ฐ ์ต์ด ์์ฑ๋๊ธฐ ์ ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์, ๋๊ธฐํ ์์ ์ด ์๋ ์ ์ฉ๋๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ๋ฌ๋ฆฌ Tread- Safe ํ๋ค.