์ฑ๊ธํค ํจํด
์ฑ๊ธํค ํจํด์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋จ ํ๋๋ง ์์ฑ๋๋๋ก ๋ณด์ฅํ๊ณ ์ด์ ๋ํ ์ ์ญ์ ์ธ ์ ๊ทผ์ ์ ์ ๊ณตํ๋ ๋์์ธ ํจํด์
๋๋ค. ์ฃผ๋ก ๊ณต์ ๋ฆฌ์์ค ๊ด๋ฆฌ, ์ค์ ์ ๋ณด ์ ์ง, ์์คํ
์ ๋ฐ์ ์์
์กฐ์จ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ๋ชฉ์
โข
์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ๋๋ง ์์ฑ
โข
์์ฑ๋ ์ธ์คํด์ค์ ๋ํ ์ ์ญ ์ ๊ทผ์ ์ ๊ณต
โข
๊ณต์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ์ ์ด
์ฃผ์ ํน์ง
โข
์ง์ ์ธ์คํด์คํ๋ฅผ ๋ฐฉ์งํ๋ private ์์ฑ์
โข
ํด๋์ค์ private static ์ธ์คํด์ค
โข
์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ public static ๋ฉ์๋
โข
ํ์ํ ๊ฒฝ์ฐ ์ค๋ ๋ ์์ ์ฑ ๋ณด์ฅ
์์ ์ฝ๋
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Java
๋ณต์ฌ
์ฝ๋ ํด์ค
โข
private static Singleton instance: ํด๋์ค์ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ ์ ์ ๋ณ์์
๋๋ค.
โข
private Singleton(): private ์์ฑ์๋ก, ์ธ๋ถ์์ ์ง์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
โข
public static Singleton getInstance(): ์ฑ๊ธํค ์ธ์คํด์ค์ ์ ๊ทผํ๊ธฐ ์ํ ์ ์ญ ์ ๊ทผ์ ์
๋๋ค.
์ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ธ ์ฑ๊ธํค ํจํด ๊ตฌํ์ ๋ณด์ฌ์ฃผ์ง๋ง, ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์์ ํ์ง ์์ ์ ์์ต๋๋ค. ์ค์ ์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค:
โข
synchronized ํค์๋ ์ฌ์ฉ
โข
Double-Checked Locking ํจํด ์ ์ฉ
โข
์ด๊ธฐํ ์์ ์ ์ธ์คํด์ค ์์ฑ (Eager Initialization)
์ด๋ฌํ ๊ฐ์ ์ฌํญ๋ค์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.