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