์ ์
์ด๋ค ํด๋์ค๊ฐ ์ต์ด ํ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ด๋ค.
์ฝ๊ฒ๋งํด, ์ฑ๊ธํค ํจํด์ ํ๋์ ์ธ์คํด์ค๋ง ์์ฑํ์ฌ ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ด๋ค.
์์ฑ์๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํด๋, ์ค์ ๋ก ์์ฑ๋๋ ์ธ์คํด์ค๋ ํ๋์ด๋ค. ์ต์ด๋ก ์์ฑ๋ ์ดํ์ ํธ์ถ๋ ์์ฑ์๋ ์ด๋ฏธ ์ต์ด๋ก ์์ฑํ๋ ์ธ์คํด์ค๋ฅผ ๋ฐํ์ํค๋๋ก ๋ง๋ ๊ฒ์ด๋ค.(์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํด ๋ค๋ฅธ ๊ณณ์์ ์์ฑํ์ง ๋ชปํ๋๋ก ๋ง๋ค๊ณ , getInstance() ๋ฉ์๋๋ฅผ ํตํด ์ฌ์ฉํ๋๋ก ๊ตฌํํ๋ค)
๊ทธ๋์ ์ธ์คํด์ค๊ฐ ํ์ํ ๋, ๋๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด์ ์ธ์คํด์ค๋ฅผ ํ์ฉํ ์ ์๋ค.
*์ธ์คํด์ค : ํด๋์ค์ ํ์ฌ ์์ฑ๋ ์ค๋ธ์ ํธ. ๊ฐ์ฒด
์ฅ์
- ํ๋ฒ์ new๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ๊ณ ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ป๊ธฐ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
- ์ฑ๊ธํค์ผ๋ก ๋ง๋ค์ด์ง ํด๋์ค์ ์ธ์คํด์ค๋ ์ ์ญ(static)์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ฝ๋ค. ๊ทธ๋์ ๊ณตํต๋ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํด์ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
- ๋๋ฒ์งธ ์ด์ฉ๋ถํฐ๋ ๊ฐ์ฒด ๋ก๋ฉ ์๊ฐ์ด ์ค์ด ์ฑ๋ฅ์ด ์ข์์ง๋ค.
- ์ธ์คํด์ค๊ฐ ์ ๋์ ์ผ๋ก ํ๊ฐ๋ง ์กด์ฌํ๋๊ฒ์ ๋ณด์ฆํ๊ณ ์ถ์๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
๋จ์
- ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ์ํฌ ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ ธ์ ๊ฐ์ฒด์งํฅ ์์น(๊ฐ๋ฐฉ-ํ์ ์์น)์ ์ด๊ธ๋๊ฒ ๋๋ค. (๊ฒฐํฉ๋๊ฐ ๋์์ง๋ฉด ์ ์ง๋ณด์๊ฐ ํ๋ค๊ณ ํ ์คํธ๋ ์ํ ๊ฒ ์งํํ ์ ์๋ค.)
- ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์์๋ ์ธ์คํด์ค๊ฐ 2๊ฐ ์์ฑ๋ ์ ์๋ค.
์์
public class Singleton {
private Singleton() {
// ์์ฑ์๋ ์ธ๋ถ์์ ํธ์ถ๋ชปํ๊ฒ private ์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
}
private static class LazyHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return LazyHolder.instance;
}
}
Initialization on demand holder idiom
๋ฉํฐ์ค๋ ๋์์ ์์ ํ ์ฑ๊ธํค ํด๋์ค๋ฅผ ๋ง๋๋ ๋ํ์ ์ธ, ๊ฐ์ฅ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฑ๊ธํค ํด๋์ค์์ Holder ํด๋์ค๋ฅผ ๋์ด JVM์ Class loader ๋งค์ปค๋์ฆ ํน์ง์ ์ด์ฉํด ์ฑ๊ธํค์ ์ด๊ธฐํ์ ๋ํ ์ฑ ์์ JVM์๊ฒ ๋ ๋๊ธด๋ค.
Holder ํด๋์ค ์์ ์ ์ธ๋ instance๊ฐ static์ด๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋ก๋ฉ์์ ์ ํ๋ฒ๋ง ํธ์ถ๋ ๊ฒ์ด๋ฉฐ final์ ์ฌ์ฉํด ๋ค์ ๊ฐ์ด ํ ๋น๋์ง ์๋๋ก ํ๋ค.
*JVM(Java Virtual Machine) : ์๋ฐ๋ฅผ ์คํํ๊ธฐ์ํ ๊ฐ์ ๊ธฐ๊ณ(์ปดํจํฐ)
'๋์์ธํจํด ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฉํ ๋ฆฌ(Factory) ํจํด (0) | 2023.02.05 |
---|