๐นย ์ ๋ฆฌ by ์ฅ๋ฏธ(https://velog.io/@newbiekim/)
์ฑ๊ธํค ํจํด์ด๋, ๊ฐ์ฒด์ ์ธ์คํด์ค๊ฐ ์ค์ง 1๊ฐ๋ง ์์ฑ๋๋ ํจํด์ ์๋ฏธํ๋ค.
์ฑ๊ธํค ํจํด์ ํด๋์ค๊ฐ ์ค์ง ํ๋์ฌ์ผ ํจ์ ๋ณด์ฅํ๋ ๊ณณ, ๋๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ํ๋์ ์ธ์คํด์ค๋ง ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์ ํ์ฉํ ์ ์๋ค.
public class Singleton {
//๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋๊ณ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ.
private static Singleton instance = new Singleton();
private Singleton() {
//์์ฑ์๋ ์ธ๋ถ์์ ํธ์ถํ์ง ๋ชปํ๊ฒ private์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
}
public static Singleton getInstance() {
return instance;
}
}
public class Speaker {
//์๋๋ private. getter, setter ํ์ํ์ง๋ง ํธ์์ public์ผ๋ก ํจ.
public int volume = 5;
//2. private static ์ธ์คํด์ค ๋ณ์
private static Speaker instance;
//3. public static getInstance() method ๊ตฌํ
public static getInstance() {
if(instance == null) {
instance = new Speaker();
}
return instance;
}
//1. private ์์ฑ์
private Speaker() {}
}
public static void main(String[] args) {
//๊ฐ์ฒด1 ์์ฑ
Speaker speaker1 = Speaker.getInstance();
//๊ฐ์ฒด2 ์์ฑ
Speaker speaker2 = Speaker.getInstance();
//๊ฐ์ฒด์ ์ฃผ์ ๋น๊ต (๋๊ฐ์ ์ฃผ์๊ฐ์ด ๋์จ๋ค. -> ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.)
System.out.println(speaker1);
System.out.println(speaker2);
//๊ฐ์ฒด์ attribute๊ฐ ์ฝ์ด์ค๊ธฐ (๋ ๋ค 5๊ฐ ๋์จ๋ค.)
System.out.println(speaker1.volume);
System.out.println(speaker2.volume);
}
class Singleton {
/* static + ์ค์ฒฉ ํด๋์ค(ํ๋): ์ ํ๋ฆฌ์ผ์ด์
๋น ๋จ ํ๋ + singleInstanceHolder๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ ๋๊น์ง ๋ฏธ๋ฃธ. ์ ์ ์ด๊ธฐํ๋ก ์์ฑ๋๋ฏ๋ก ์ค๋ ๋ ์ธ์ดํํ๋ค. */
/* final: ๋ค์ ๊ฐ์ด ํ ๋น๋์ง ์๊ฒ(read only) / ๋๋ฌธ์๋ก ๋ณ์ ์ ์ธ */
private static class singleInstanceHolder {
private static final Singleton INSTANCE = new Singleton();
}
private static Singleton getInstance() {
return singleInstanceHolder.INSTANCE;
}
}
์ฑ๊ธํค ํจํด ์ฌ์ฉ ์ ์ด์
์ฑ๊ธํค ํจํด ์ฌ์ฉ ์ ๋ฌธ์ ์