๐ŸŒนย ์ •๋ฆฌ 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;
	}
}

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์‚ฌ์šฉ ์‹œ ์ด์ 

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์‚ฌ์šฉ ์‹œ ๋ฌธ์ œ์ 