๋ฐฑ์—”๋“œ(Back-End) ๊ฐœ๋ฐœ/Java

[JAVA] ๋””์ž์ธ ํŒจํ„ด - ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด(Singleton)

rabo93 2025. 5. 28. 11:25
์ž๋ฐ” ๋Œ€ํ‘œ ์ฝ”๋”ฉ ํŒจํ„ด : ์„ค๊ณ„์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ, ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋†’์ž„
⇒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด๋งŒ ์จ๋ดค์Œ.. ๋‹ค๋ฅธ ํŒจํ„ด ๊ณต๋ถ€ ํ•  ๊ฒƒ! Spring Bean ์ž์ฒด๊ฐ€ ๊ธฐ๋ณธ ์‹ฑ๊ธ€ํ†ค!

 

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(Singleton Pattern)

  • ๊ฐ์ฒด๊ฐ€ ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก! (์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋–„ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(static)ํ•˜๊ณ  ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด)
  • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ์—์„œ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋œ๋‹ค๋ฉด ์„ค์ •๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์œ„ํ—˜์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ!

(but, ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„, ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋“ค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ ‘๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™’ ์œ„๋ฐฐ)

⇒ ์žฅ์  : ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ, ์ „์—ญ ์ƒํƒœ ๊ณต์œ  ๊ฐ€๋Šฅ

⇒ ์‚ฌ์šฉ ์˜ˆ์‹œ : DB ์—ฐ๊ฒฐ ๊ฐ์ฒด, ์„ค์ • ์ •๋ณด ๊ด€๋ฆฌ ํด๋ž˜์Šค, ๋กœ๊ฑฐ ๋“ฑ

 

// ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์˜ˆ์ œ
public class CarClass {
	
	// ์ž์‹ ์„ ๋ฉค๋ฒ„๋กœ ์„ ์–ธํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜ฌ๋ ค ๋†“๋Š”๋‹ค(static)
	private static CarClass car = new CarClass(); 
	
	// ์™ธ๋ถ€์—์„œ ๋ฉค๋ฒ„๋กœ ์„ ์–ธ๋œ car๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด
	// getInstance ๋ฉ”์„œ๋“œ ์™ธ์—๋Š” CarClass ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
	// => ํ•ด๋‹น car ๊ฐ์ฒด๋ฅผ ๋ˆ„๊ตฐ๊ฐ€ ์ด์šฉํ•œ๋‹ค๋ฉด ์ด์šฉ์„ ๋ชปํ•œ๋‹ค.(์‹ฑ๊ธ€ํ†ค ํŒจํ„ด)
	public static CarClass getInstance() {
		return car;
	}
}