Singleton
์ ์
ํ๋์ ํด๋์ค๊ฐ ์ค์ง ๋จ์ผ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ๊ฒฝ์ฐ
์ดํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ ์ญ์ ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ค ํด๋์ค๊ฐ ์ต์ด ํ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น(static) ํ๊ณ , ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ํจํด.
๊ตฌํ (์๋ ์ ๊ฐ์ด ๋ณด๊ธฐ!)
์์ฑ๋ singleton object๋ฅผ ์ ์ฅํ ์ ์๋ ์์ ๊ณผ ๊ฐ์ ํ์ ์ static field์ ์
๋ชจ๋ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์บก์ํ (private or protected constructor)
์ธ์คํด์ค์ ๋ํ ์์ธ์ค๋ฅผ ์ ๊ณตํ๋ public static member function (public getter, ex: getInstance() )
์ด ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์์ ํ๋ฒ๋ง ์ค๋ธ์ ํธ๊ฐ ๋ง๋ค์ด์ง๊ฒ ํ๋ค.
์์ฑ๋ ์ค๋ธ์ ํธ๋ static field์ ์ ์ฅ ํ๊ฑฐ๋, static field์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ ์ ๋ ์๋ค.
instance์ ๋ํ ์ ๊ทผ ์ ๊ณต.
ํ๋ฒ singleton object๋ฅผ ๋ง๋ค๊ณ ๋ ํ์๋ ์ ๊ทผ์ ํจ์(getter) ๋ฅผ ํตํด ์ด๋ฏธ ๋ง๋ค์ด์ ธ static field์ ์ ์ฅํด๋ ์ค๋ธ์ ํธ๋ฅผ ๋๊ฒจ์ค๋ค.
์
๋ฌธ์ ์ (ํ๊ณ)
์ ์ญ ์ํ๋ฅผ ๋ง๋ ๋ค.
static method๋ก ์ฝ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
์๋ฌด ๊ฐ์ฒด๋ ์์ ๋กญ๊ฒ ์ ๊ทผํ๊ณ ์์ ํ๊ณ ๊ณต์ ๊ฐ๋ฅํ ์ ์ญ์ํ
private ์์ฑ์๋ฅผ ๊ฐ์ง๊ณ ์์ด์, ์์ ๋ถ๊ฐ
๊ฐ์ฒด์งํฅ์ ์ฅ์ ์ธ ์์, ๋คํ์ฑ ์ ์ฉ ๋ถ๊ฐ
ํ ์คํธ ํ๊ธฐ ์ด๋ ต๋ค.
์๋ฒ ํ๊ฒฝ์์ ์ฑ๊ธํค์ด ํ๋๋ง ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ณด์ฅ ํ ์ ์๋ค.
3๊ฐ์ง ํ์ ์ค์ด ์๊ฑด
๋จ์ผ ์ธ์คํด์ค์ ์์ ๊ถ์ ํฉ๋ฆฌ์ ์ผ๋ก ํ ๋น ๊ฐ๋ฅํด์ผํจ.
lazy initialize
global access ๋ฌ๋ฆฌ ์ ๊ณต๋์ง ์๋ ๊ฒฝ์ฐ.
์ฅ์
ํ ๋ฒ์ ๊ฐ์ฒด ์์ฑ์ผ๋ก ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง.
ํ ๋ฒ ์์ฑํ ๊ฐ์ฒด๋ ๋ฌด์กฐ๊ฑด ํ ๋ฒ ์์ฑ์ผ๋ก ์ ์ญ์ฑ์ ๋๋ฉฐ, ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ณต์ ๊ฐ ๊ฐ๋ฅ.
[์ฐธ๊ณ ]
https://elfinlas.github.io/2019/09/23/java-singleton/
https://blog.seotory.com/post/2016/03/java-singleton-pattern
https://jeong-pro.tistory.com/86
์ฑ - ํ ๋น์ ์คํ๋ง
Last updated