๋์์ธ ํจํด์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ์ธ ์ฑ๊ธํค์ ์์๋ณด์.
Singleton ์ ์
- ํน์ ํด๋์ค์์ ๋ง๋ค ์ ์๋ ์ธ์คํด์ค ์๋ฅผ ํ๋๋ก ์ ํ
- ์กฐ๊ฑด
- ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ต๋ ํ๋๋ง ์์ด์ผ ํจ
- Setting, file system
- ์ ์ญ์ ์ ๊ทผ ์ง์ ์ ์ ๊ณตํด์ผ ํจ
- ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ต๋ ํ๋๋ง ์์ด์ผ ํจ
Singleton์ ๋น๊ณต์์ ์ ์
- static ์ฌ์ฉ์ ๋ํ ๋นํ์ ํด๊ฒฐํ๋ ํจํด
- ์ฆ, OO์์ ์ ์ญ ๋ณ์ ๋ฐ ์ ์ญ ํจ์๋ฅผ ๋ง๋๋ ๋ฒ
Singleton
- ๋ ์์ธํ ์ค๋ช ์, 08. Singleton๋ฅผ ์ฐธ๊ณ ํ์.
- Class Diagram์ด ์ด์ํ๋ค๋ฉด, ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์.
Singleton Example
์ด์ ์ ์ดํด๋ณธ Math
Class๋ฅผ 08. Singleton์ผ๋ก ๋ฐ๊พผ๋ค ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
Singleton vs. static
static์ผ๋ก ๋ชปํ๋ ์ผ
- ๋คํ์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
- Signiture๋ฅผ ๊ทธ๋๋ก ๋ ์ฑ, multiton ํจํด์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
- ์ฆ, instance๊ฐ ํ๊ฐ์ธ ์ํฉ(singleton)์์ ์ฌ๋ฌ๊ฐ์ธ ์ํฉ(multiton)์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
- ๊ฐ์ฒด์ ์์ฑ ์์ ์ ์ ์ดํ ์ ์๋ค.
- Java์
static
์ ํ๋ก๊ทธ๋จ ์คํ์ ์ด๊ธฐํ๋จ - ๋ฌผ๋ก singleton๋ ์์ฑ ์๊ธฐ๋ฅผ ์ ์ดํ๋๋ฐ ์ด๋ ค์์ด ์์
- Java์
Singleton ๊ฐ์ฒด์ ์์ฑ ์๊ธฐ
getInstance()
๋ฉ์๋๋ฅผ ํธ์ถ๋ ๋ ์์ฑ๋๋ค.- ํ์ง๋ง ๋ณดํต ๋ค์ํ ๊ฐ์ฒด์์ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์ด๋ค ๊ฐ์ฒด๊ฐ ๋จผ์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ํด๋น ๊ฐ์ฒด์ ์์ฑ์์ ์ ๋ฌ๋ผ์ง๋ค.
์ด๊ธฐํ ์์๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ
- ๋ณดํต์ ๋ฌธ์ ๊ฐ ์๋ค.
- ํ์ง๋ง ์ธ๋ถ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์๊ฐ ์ ์๋ฏธ ํ ์๋ ์๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์์ ์ ์ฌ๋ฌ ์ฑ๊ธํด์
getInstance()
๋ฅผ ์์๋๋ก ํธ์ถํ์ฌ ์์๋ฅผ ๋ณด์ฅํ ์ ์๋ค.B.getInstance(); C.getInstance(); A.getInstance()
์ฑ๊ธํด ์์ฑ์ ์ธ์๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ก๊ทธ๋จ ์์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ๋์ค์ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ค์ ์ธ์คํด์ค๋ฅผ ๋ณด์ฅํ๋ฉด ๋๋ค.
- Swift์์๋ ์ด๋ฌํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผํ ์ง.. ๊ณต์ ๋ฌธ์์๋ ์ด๋ ๊ฒ ๋์ ์์ด ํ์ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค ใ
Singleton์ ๋ณํ
- ํ์ฌ์ ๊ตฌํ์ผ๋ก๋ ํํ์ด ์ด๋ ต๋ค.
- ๊ทธ๋์ ์ค๋ฌด์์๋ ๋ค๋ฅธ ๋ณํ์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
- ์ฆ, ์ด๋ฌํ ์ ์์ ๋์์ธ ํจํด์ ๊ทธ์ ๊ฐ์ด๋๋ผ์ธ ์ด๋ผ๋ ๊ฒ.
- ๊ทธ๋์ ์์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
- ์์ฑ๊ณผ ๋ฐํ ์์ ์ ๋ถ๋ฆฌํ๋ค.
- ์ด ๊ณผ์ ์์
assert
๋ฌธ์ ์ฌ์ฉํ์ฌ, ์ด๊ธฐ ์ฌ์ฉ์์ instance๊ฐ ๋ง๋ค์ด์ก๋์ง ๋ฐํ์์ ํ์ธํ๋ค.- ๋๋ฒ๊น ์ด ์กฐ๊ธ ํธํด์ง๋ค.
- ์ด ๋,
getInstance()
์ญ์ ๋ณ๊ฒฝ๋์๋ค.createInstance()
์ฝ๋๊ฐ ๋จผ์ ํธ์ถ๋์๋ค๋ ๊ฐ์ ์ผ๋ก ๋์ํ๋ ์ฝ๋- ์ธ์ ๋ ์ ํจํ ์ํ๋ฅผ ์ถ๊ตฌํ๋ OO ์ ์ ์๋ ์๋ฐฐ๋จ
- ์คํ์ ์ด๊ธฐํ, ์ข
๋ฃ์ ์ฒญ์ํ๋ ํจ์๋ ๋นผ๋จน๊ธฐ ์ด๋ ค์ด ํจ์. ๊ทธ๋์ ๊ทธ๋๋ง ์ฉ์ธ ๊ฐ๋ฅ
- ํ์ง๋ง ์ด ์ค์๋ฅผ ํ์ง ์๋๋ก ๋๋ฅผ ๋ง๋๋๊ฒ ๋ ์ฐ์ ์ด ๋์ด์ผ ํจ
- ๊ดํ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์ก์๊ณ ๋ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ์ ์ค๋ฒ ์์ง๋์ด๋ง
- ์์ ์์น์ผ๋ก ํด๊ฒฐ๋ ์ ์๋ ๋ฌธ์ ๋ฅผ ๊ธฐ์ ์ ์ผ๋ก ํธ๋ ๊ฒ์,
- ๊ทผ๋ณธ์ ์ผ๋ก โ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐโํ์๋ ์์ง๋์ด์ ์ ์กฐ์ ์ด๊ธ๋ ๊ฒ
Singleton์ ์ํฐํจํด์ธ๊ฐ?
์ํฐํจํด: ์์ข์ ๋ฐฉ๋ฒ - ์) ๋งค์ง ๋๋ฒ, ๋งค์ง ์คํธ๋ง
- ๊ทผ๋ณธ์ ์ผ๋ก static๊ณผ ๊ฐ์์
- ์ฑ๊ธํด์ ์์ฐ๊ณ ๊ฐ์ ์ผ ํ ์ ์์์
- ๊ทผ๋ฐ ์ธ๋ฐ ์์ด ๋ณต์กํด์ง
- ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด์ฌ์ผ๋ง ํ๋ ์ค์ฉ์ ์ด์ ๊ฐ ์๋๊ฐ? ์์ผ๋ ํจ์ค
๋ชจ๋ ๊ฒ์ ๋๊ตฌ์ ๋ถ๊ณผ
- ํน์ ๋ฌธ์ ์ ์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ง์ด๋ค.
- ์ฑ๊ธํค๋ ๊ทธ๋ฐ ๋๊ตฌ์ค ํ๋์ด๋ค.