์ด ๊ธ์ ํจํด์ด๋ผ๋ ๊ฐ๋
์ ์ฒ์ ์ ํ์
จ๊ฑฐ๋,
Singleton
'e'์ ๋ํด ๋ค์ด๋ณด์
จ๊ฑฐ๋, ๋ง๋ค์ด ๋ณด์
จ์ง๋ง ์์ง ์๋ฌด๊ฒ๋ ์ดํดํ์ง ๋ชปํ์ ๋ถ๋ค์ ๋์์ผ๋ก ์์ฑ๋์์ต๋๋ค. ํ์! JavaRush ํ์๋ค์ ๋ ๋ฒจ 15์์ ์ฒ์์ผ๋ก ํจํด์ ์ ํ๋๋ฐ, ๊ฐ์๊ธฐ ์บก์ด
Singleton
๊ฒ์ผ๋ฅธ ๊ตฌํ์ผ๋ก ํจํด์ "์์ "ํ๊ณ ๊ตฌํํ๋๋ก ์์ฒญํฉ๋๋ค. ์ฒ์ ๋ฃ๋ ํ์๋ค์
Singleton
ํจํด์ด ๋ฌด์์ธ์ง, ์ ํ์ํ์ง, ์ด๋ค ์ข
๋ฅ์ ํจํด์ธ์ง,
Singleton
๋ง์ง๋ง์ผ๋ก ์ด๊ฒ์ด ์ด๋ค ์ข
๋ฅ์ ๊ฒ์ผ๋ฅธ ๊ตฌํ์ธ์ง์ ๋ํด ์ฆ์ ๋ง์ ์ง๋ฌธ์ ํฉ๋๋ค. ์์๋๋ก ๋ต๋ณ์ ์์ํ๊ฒ ์ต๋๋ค.
์ด์จ๋ ํจํด์ด๋ ๋ฌด์์
๋๊น?
๋ ๋์ ์ดํด๋ฅผ ์ํด์๋ ์ด ์ง๋ฌธ์ ์ญ์ฌ๋ฅผ ํตํด ๋ตํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ ์ค์๋ ํฅ๋ฏธ๋ก์ด ์์ด๋์ด๋ฅผ ์๊ฐํด๋ธ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ๋ฑ ์ ๋ช
ํ ๋ค ๋ช
์ ์๊ฐ๊ฐ ์์ต๋๋ค.
๊ทธ๋ค์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ๊ฑฐ์ ๋์ผํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๊ตฌ์กฐ์ ์ผ๋ก ๋์ผํ ์ ํ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ค์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ํจํด์ ํจํด ํํ๋ก ์ค๋ช
ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ด ์ฑ
์ 1995๋
์ "๊ฐ์ฒด ์งํฅ ์ค๊ณ ๊ธฐ์ " ์ด๋ผ๋ ์ ๋ชฉ์ผ๋ก ์ถํ๋์์ต๋๋ค .
๋์์ธ ํจํด" . ์ฑ
์ ๋ชฉ์ด ๋๋ฌด ๊ธธ์ด์ ธ์ ๊ทธ๋ฅ 4์ธ๋ฐฉ์ ์(
The Book of the Gang of Four )๋ก ์๋ ค์ง๊ฒ ๋์์ต๋๋ค . ์ฒซ ๋ฒ์งธ ํ์์๋ 23๊ฐ์ ํจํด์ด ์ถํ๋์๊ณ , ์ดํ ์์ญ ๊ฐ์ ํจํด์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋จ๋ฝ์
"ํจํด์ด๋ ๋ฌด์์
๋๊น?" ๋ผ๋ ์ง๋ฌธ์ ๋๋ตํ์ฌ ๋ช ๋จ์ด๋ก ์์ฝํด ๋ณด๊ฒ ์ต๋๋ค.
ํจํด์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๋ํ ํ์คํ๋ ์๋ฃจ์
์
๋๋ค. |
๊ทธ๋ฆฌ๊ณ
Singleton
์ด๊ฒ์ ์ด๋ฌํ ํจํด ์ค ํ๋์ผ ๋ฟ์
๋๋ค.
ํจํด์ด ํ์ํ ์ด์ (๋์์ธ ํจํด)
ํจํด์ ๋ชฐ๋ผ๋ ํ๋ก๊ทธ๋๋ฐํ ์ ์๋๋ฐ, JavaRush์ 15๋ฒ์งธ ๋ ๋ฒจ๊น์ง ๊ทธ ์กด์ฌ์ ๋ํด ์๋ฌด ๊ฒ๋ ๋ชจ๋ฅด๊ณ ์๋ฐฑ ๊ฐ์ ๋ฏธ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๋ ๊ฒ๋ง์ผ๋ก๋ ์ด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ํจํด์ด ์ผ์ข
์ ๋๊ตฌ์ด๋ฉฐ, ๊ทธ ์กด์ฌ๋ก ์ธํด ๋ง์คํฐ์ ์๋ง์ถ์ด๊ฐ ๊ตฌ๋ณ๋๋ค๋ ์ ์ ์์ฌํฉ๋๋ค.
ํจํด์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ค ํ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํจํด์ ์๋ฉด ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋น์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ธ๋์ญ๊ณผ ์ซ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ง์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ์ ํ๊ณ ์ด์ ๋ง์ ์๊ฐ์ ํ ์ ํ ์๋ ์๊ณ , ์ด๋ฏธ ์ค๋ ์ ์ ์ค๋ช
ํ ๊ฒ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์๋ ์์ต๋๋ค. ํจํด๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ๋ํ, ํจํด์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋์ฑ ํ์คํ๋๊ณ , ์ฌ๋ฐ๋ฅธ ํจํด์ ์ฌ์ฉํ๋ฉด ์ค์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ์ค์๋ ์ด๋ฏธ ์ด ํจํด์์ ์์ธก๋๊ณ ์ ๊ฑฐ๋์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฒ๋ค๊ฐ ํจํด์ ๋ํ ์ง์์ ํตํด ํ๋ก๊ทธ๋๋จธ๋ ์๋ก๋ฅผ ๋ ์ ์ดํดํ ์ ์์ต๋๋ค. ๋๋ฃ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ํ๋ ์์
์ ์ค๋ช
ํ๋ ๋์ ๋จ์ํ ํ
ํ๋ฆฟ ์ด๋ฆ์ ๋งํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
์์ฝํ๋ฉด ๋์์ธ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ๋์์ด ๋ฉ๋๋ค.
- ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช
ํ์ง ๋ง๊ณ ํ์ค ์๋ฃจ์
์ ์ฌ์ฉํ์ญ์์ค.
- ์ฝ๋ ํ์คํ;
- ์ฉ์ด ํ์คํ;
|
์ด ์น์
์ ๊ฒฐ๋ก ์์ ์ฐ๋ฆฌ๋ ๋ค์ํ ํจํด ์ ์ฒด๋ฅผ ์ธ ๊ฐ์ง ํฐ ๊ทธ๋ฃน์ผ๋ก ๋จ์ํํ ์ ์๋ค๋ ์ ์ ์ฃผ๋ชฉํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ฑ๊ธํด ํจํด
Singleton
์์ฑ ํจํด์ ๋ํ๋
๋๋ค . ๋ฌธ์ ๊ทธ๋๋ก ๋ฒ์ญํ๋ฉด ์ธ๋กญ์ต๋๋ค. ์ด ํจํด์ ์ฌ์ฉํ๋ฉด ํด๋์ค์ ํ๋์ ๊ฐ์ฒด(ํด๋์ค์ ์ธ์คํด์ค ํ๋)๋ง ์๊ณ ํด๋น ๊ฐ์ฒด์ ์ ์ญ ์ก์ธ์ค ์ง์ ์ด ์ ๊ณต๋ฉ๋๋ค. ์ค๋ช
์ ๋ณด๋ฉด ์ด ํจํด์ด ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ฌ์ฉ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด ๋ถ๋ช
ํด์ง๋๋ค.
- ํ๋ก๊ทธ๋จ์์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ ๊ฒ์์๋ "Character" ํด๋์ค๊ฐ ์๊ณ ์ด ํด๋์ค์๋ ์บ๋ฆญํฐ ์์ฒด๋ฅผ ์ค๋ช
ํ๋ ๊ฐ์ฒด๊ฐ ํ๋๋ง ์์ด์ผ ํฉ๋๋ค.
- ํด๋์ค ๊ฐ์ฒด์ ์ ์ญ ์ก์ธ์ค ํฌ์ธํธ๋ฅผ ์ ๊ณตํด์ผ ํ ๋. ์ฆ, ํ๋ก๊ทธ๋จ์ ์ด๋ ๊ณณ์์๋ ๊ฐ์ฒด๊ฐ ํธ์ถ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฝ๊ฒ๋ ๋จ์ํ ์ ์ญ ๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ฐ๊ธฐ ๊ธ์ง๋์ด ์์ง ์๊ณ ๋๊ตฌ๋ ์ด ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๊ฐ์ฒด์ ๋ํ ์ ์ญ ์ก์ธ์ค ์ง์ ์ด ์์ค๋๊ธฐ ๋๋ฌธ์
๋๋ค.
Singleton
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ๊ป ์๋ํ๋ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์๊ณ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๋ถ๋ถ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ ์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์์ฑ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Singleton
์ด์ ์ ์์ฑ๋ ํด๋์ค ์ธ์คํด์ค๋ฅผ ๋์ฒดํ๋ ๋ค๋ฅธ ์ฝ๋๊ฐ ์์์ ๋ณด์ฅํฉ๋๋ค.
์ด ๋ ๊ฐ์ง ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐ๋ฉ๋๋ค
Singleton
. ํ๋ก๊ทธ๋จ์๋ ๊ฐ์ฒด๊ฐ ํ๋๋ง ์์ด์ผ ํ๋ฉฐ ๊ฐ์ฒด์ ๋ํ ์ ์ญ ์ก์ธ์ค๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ ๋ฒจ 15์ ์์์ ์บก์ ๋ค์ ์์
์ ๋ํด ์ด ํจํด์ ๊ตฌํํ๋๋ก ์์ฒญํฉ๋๋ค(์ค๋ช
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค).
์กฐ๊ฑด์ ์ฃผ์ ๊น๊ฒ ์ฝ์ผ๋ฉด
Singleton
์ฌ๊ธฐ์ ์ ํํ (Single)์ด ํ์ํ ์ด์ ๊ฐ ๋ถ๋ช
ํด์ง๋๋ค. ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ ๊ฐ ํด๋์ค์ ๋ํด ํ๋์ ๊ฐ์ฒด(
Sun
,
Moon
, ) ๋ฅผ ์์ฑํ๋๋ก ์์ฒญํฉ๋๋ค
Earth
. ๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ์ ๊ฐ ํด๋์ค๊ฐ ํ์/๋ฌ/์ง๊ตฌ๋ฅผ ํ๋๋ง ์์ฑํด์ผ ํ๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ๋
ผ๋ฆฌ์ ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ๋ง์ ์คํ์์ฆ ๋ฒ์ ์ ์์ฑํ์ง ์๋ ํ ํฐ๋ฌด๋์๋ ์ผ์ด ๋ ๊ฒ์
๋๋ค.
์ธ ๋จ๊ณ์ Java ๊ตฌํSingleton
๊ธฐ๋ฅ Java์ ์ฑ๊ธํค ๋์์ ์์ฑ์๊ฐ ํญ์ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์
Singleton
'a์ ๋ชจ๋ ๊ตฌํ์ ์์ฑ์๋ฅผ ์จ๊ธฐ๊ณ ๋จ์ผ ๊ฐ์ฒด์ ์กด์ฌ๋ฅผ ์ ์ดํ๊ณ ์๋ก ๋ํ๋๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ "ํ๊ดด"ํ๋ ๊ณต๊ฐ ์ ์ ๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. 'a๊ฐ ํธ์ถ ๋๋ฉด
Singleton
์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋(์์ง ํ๋ก๊ทธ๋จ์ ์๋ ๊ฒฝ์ฐ) ์ด๋ฏธ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด:
#1. โ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ํด๋์ค์ ์ ์ฉ ์ ์ ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
}
#2. โ ํด๋์ค ์์ฑ์(๊ธฐ๋ณธ ์์ฑ์)๋ฅผ ๋น๊ณต๊ฐ๋ก ๋ง๋ญ๋๋ค(ํด๋์ค ์์ฑ์์ ๋ํ ์ก์ธ์ค๊ฐ ํด๋์ค ์ธ๋ถ์์ ๋ซํ๋ฉด ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์).
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){}
}
#์ผ . โ ์ฑ๊ธํค์ ์ป๋ ๋ฐ ์ฌ์ฉ๋ ์ ์ ์์ฑ ๋ฐฉ๋ฒ์ ์ ์ธํฉ๋๋ค.
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){}
public static LazyInitializedSingleton getInstance(){
if(instance == null){
instance = new LazyInitializedSingleton();
}
return instance;
}
}
์์ ์๋ ๋จ์ํ ์์ฑ์๋ฅผ ์จ๊ธฐ๊ณ ํ์ค ์์ฑ์ ๋์ ์์ฒด ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ค์ ์ด์ํฉ๋๋ค. ์ด ๊ธฐ์ฌ๋ JavaRush ํ์๋ค์ด ์ฒ์์ผ๋ก ์ด ํจํด(๋ฐ ์ผ๋ฐ์ ์ธ ํจํด)์ ์ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์์ผ๋ฏ๋ก ๋ ๋ณต์กํ ์ฑ๊ธํค์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ์ด ํจํด์ ๋ ์ธ๋ถ์ ์ผ๋ก ๊ฐ์ ํด์ผ ํ ์๋ ์๋ค๋ ์ ๋ง ์ฐธ๊ณ ํ์ธ์. ์๋ฅผ ๋ค์ด ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ(์ค๋ ๋ ํญ๋ชฉ ์ฐธ์กฐ)์์ ์ฌ๋ฌ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋์์ Singleton์ getter ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ผ๋ฉฐ, ์์ ์ค๋ช
๋ ์ฝ๋๋ ์๋์ ์ค์งํฉ๋๋ค. ๊ฐ ๊ฐ๋ณ ์ค๋ ๋๊ฐ ํด๋์ค์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ํ ๋ฒ์. ๋ฐ๋ผ์ ์ฌ๋ฐ๋ฅธ Thread-safe ์ฑ๊ธํค์ ์์ฑํ๋ ๋ฐ๋ ์ฌ์ ํ ์ฌ๋ฌ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ ์ด์ผ๊ธฐ์
๋๋ค =)
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก. ์บก์ด ์๊ตฌํ ์ง์ฐ์ด๊ธฐํ๋ ๋ฌด์์
๋๊น ?์ง์ฐ์ด๊ธฐํ๋ ์ง์ฐ์ด๊ธฐํ๋ผ๊ณ ๋ ํฉ๋๋ค. ์ด๋ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์์
(๊ฐ์ฒด ์์ฑ์ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์์
)์ ๋ฏธ๋ฆฌ ์ํํ๋ ๊ฒ์ด ์๋๋ผ ์์ฒญ ์ ์ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋
Singleton
'a'์์ ์ผ์ด๋๋ ์ผ์
๋๋ค. ์ฆ, ๊ฐ์ฒด๋ ๋ฏธ๋ฆฌ ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ ์ก์ธ์ค๋๋ ์๊ฐ ์์ฑ๋ฉ๋๋ค. ์ง์ฐ ์ด๊ธฐํ ๊ฐ๋
์ด ์ด๋ป๊ฒ๋ 'om'๊ณผ ์๊ฒฉํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๊ฐ์ ํด์๋ ์ ๋ฉ๋๋ค
Singleton
. ์ง์ฐ ์ด๊ธฐํ๋ ํ๋ก์ ๋ฐ ํฉํ ๋ฆฌ ๋ฉ์๋์ ๊ฐ์ ๋ค๋ฅธ ์์ฑ์ ๋์์ธ ํจํด์๋ ์ฌ์ฉ๋์ง๋ง ์ด๋ ๋ ๋ค๋ฅธ ์ด์ผ๊ธฐ์
๋๋ค. =)
๊ธฐ์ฌ๋ฅผ ์ค๋นํ๋ ๋ฐ ๋ค์ ์์ค๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
- ์์ ๊ฐ ํฌํจ๋ Java ์ฑ๊ธํค ๋์์ธ ํจํด ๋ชจ๋ฒ ์ฌ๋ก
- ๋์์ธ ํจํด
- Java์ ์ฌ๋ฐ๋ฅธ ์ฑ๊ธํค
GO TO FULL VERSION