Search

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๋„๋ก ๋ณด์žฅํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ „์—ญ์ ์ธ ์ ‘๊ทผ์ ์„ ์ œ๊ณตํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ณต์œ  ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ, ์„ค์ • ์ •๋ณด ์œ ์ง€, ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์ž‘์—… ์กฐ์œจ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ 

โ€ข
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ
โ€ข
์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์—ญ ์ ‘๊ทผ์  ์ œ๊ณต
โ€ข
๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด

์ฃผ์š” ํŠน์ง•

โ€ข
์ง์ ‘ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” 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)
์ด๋Ÿฌํ•œ ๊ฐœ์„ ์‚ฌํ•ญ๋“ค์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์•ˆ์ „์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.