Singleton pattern
์ฑ๊ธํด ํจํด(Singleton pattern)
์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์ด๋ค ํด๋์ค๊ฐ ์ต์ด ํ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋์์ธ ํจํด.
๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์์ง๋ฉด ์ปดํจํฐ ์์์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๊ฒ ๋๊ณ , ์ด๋ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์๋๋ฅผ ๋๋ฆฌ๊ฒ ํ ์ ์๋ค.
-> ๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ์ต๋ ๊ฐ์๋ฅผ ์ ํํ ํ์๊ฐ ์๊ธด๋ค.
์ฑ๊ธํด ํจํด์ ์ต๋ N๊ฐ๋ก ๊ฐ์ฒด ์์ฑ์ ์ ํํ๋ ํจํด์ด๋ค. ์ด ๋ ์ค์ํ ๊ฒ์ ์์ฑ๋๋ ๊ฐ์ฒด์ ์ต๋ ๊ฐ์๋ฅผ ์ ํํ๋ ๋ฐ ์์ด์ ๊ฐ์ฒด์ ์์ฑ์ ์์ฒญํ๋ ์ชฝ์์๋ ์ผ์ผ์ด ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด๋ค.
์ฑ๊ธํด ์ฅ์
๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๋ค. ๊ณ ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ป์ผ๋ฉด์ ํ๋ฒ์ new๋ก ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ.
๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ฝ๋ค.
์ฑ๊ธํด์ผ๋ก ๋ง๋ค์ด์ง ํด๋์ค์ ์ธ์คํด์ค๋ ์ ์ญ ์ธ์คํด์ค์ด๊ธฐ ๋๋ฌธ.
๋ ๋ฒ์งธ ํธ์ถ๋ถํฐ๋ ๊ฐ์ฒด ๋ก๋ฉ์๊ฐ์ด ํ์ ํ๊ฒ ์ค์ด ์ฑ๋ฅ์ด ์ข์์ง๋ค.
์ฑ๊ธํด ๋จ์
๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ด๊ธ๋๋ฉฐ ์์ ๊ณผ ํ ์คํธ๊ฐ ์ด๋ ค์์ง๋ค.
์ฑ๊ธํด ์ธ์คํด์ค๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ์ํฌ ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ ธ '๊ฐ๋ฐฉ-ํ์ ์์น'์ ์๋ฐฐํ๊ฒ ๋๋ค.
๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ์ฒ๋ฆฌ๋ฅผ ์ ์ ํ๊ฒ ํด์ฃผ์ง ์์ผ๋ฉด ์ธ์คํด์ค๊ฐ ๋ ๊ฐ ์ด์ ์์ฑ๋ ์ ์๋ค.
์ฑ๊ธํด ํจํด ํ์ฉ๋ ์ํฉ ๋ฐ ์์
์๋ฐ ํ๋ก๊ทธ๋๋ฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ํ
๋ก๊ทธ ๋ผ์ดํฐ
๊ฒ์ ํ๋ก๊ทธ๋๋ฐ
์ฌ์ด๋ ๋งค๋์
์ค์ฝ์ด ๋งค๋์
์ฑ๊ธํด ๊ตฌํ
์ ํธ๋ฆฌํฐ ๋ฉ์๋๋ก ์ฑ๊ธํด์ ๊ตฌํํ์. ์ด ๋ ์ ํธ๋ฆฌํฐ ๋ฉ์๋ ์ธ์ ์์ฑ์๋ฅผ ์ง์ ํธ์ถํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด์๋ ์์ฑ์๋ฅผ private๋ก ์ค์ ํ๋ฉด ๋๋ค.
๋ฌธ์ ๋ ์์ฒ๋ผ ๊ตฌํํ ๊ฒฝ์ฐ, ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์๋ ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค. ์ฐ๋ ๋๊ฐ singleton ๊ฐ์ฒด๊ฐ null์ธ์ง ํ์ธํ๋ ๊ณผ์ ์ด ๊ฑฐ์ ๋์์ ์ด๋ค์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ์ทจ์ฝ์ ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น?
์์ฒ๋ผ synchronized
๋ฅผ ์์ฝ์ด๋ก ๋ฃ์ด์ฃผ๋ฉด ํด๊ฒฐ๋๋ค.
ํ์ง๋ง ์ด๊ฑด ์กฐ๊ธ๋ง ์๊ฐํด๋ณด๋ฉด ๋น์ฉ์ด ๋๋ฌด ๋นํจ์จ์ ์ธ ์ ์ ์ ์ ์๋ค.
์ต์ด์ singleton์ด null์ธ ๊ฒฝ์ฐ์๋ง ๋ค๋ฅธ ์ฐ๋ ๋์์ ๊ฒฝํฉ์ ๋ง์ผ๋ฉด ์ถฉ๋ถํ๋ฐ,
synchronized
๋ฅผ ์์ฝ์ด๋ฅผ ๋ฃ์ผ๋ฉด ๋ชจ๋ ์ฐ๋ ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒํ์ฌ ๋ณ๋ชฉํ์์ด ์ผ์ด๋๋ค.
๋ฐ๋ผ์ ์๋์ฒ๋ผ ํด๋์ค ๋ด๋ถ์์ ์ต์ด์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋๋ก ํด์ ๊ฐ์ ํ ์ ์๋ค.
์๋์ฒ๋ผ lazy holder์ ์ํด ์ด๊ธฐํ๋ฅผ ์ํฌ ์๋ ์๋ค.
์ด ๋ฐฉ๋ฒ์ JVM์ ํด๋์ค ์ด๊ธฐํ ๊ณผ์ ์์ ๋ณด์ฅ๋๋ ์์์ ํน์ฑ์ ์ด์ฉํ์ฌ ์ฑ๊ธํด์ ์ด๊ธฐํ ๋ฌธ์ ์ ๋ํ ์ฑ ์์ JVM์ ๋ ๋๊ธด๋ค.
holder ์์ ์ ์ธ๋ instance๊ฐ static์ด๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋ก๋ฉ์์ ์ ํ๋ฒ๋ง ํธ์ถ๋ ๊ฒ์ด๋ฉฐ, final์ ์ฌ์ฉํด ๋ค์ ๊ฐ์ด ํ ๋น๋์ง ์๋๋ก ๋ง๋ ๋ฐฉ๋ฒ์ด๋ค.
Last updated