![๋์์ธ ํจํด: ์ฑ๊ธํค - 1](https://cdn.codegym.cc/images/article/ae7ec2ba-45e7-465d-ad8a-f13139cbdfed/800.jpeg)
Java์์ ์ฑ๊ธํค์ด๋ ๋ฌด์์ ๋๊น?
์ฑ๊ธํค์ ๊ฐ์ฅ ๋จ์ํ ํด๋์ค ์์ค ๋์์ธ ํจํด ์ค ํ๋์ ๋๋ค. ๋๋๋ก ์ฌ๋๋ค์ "์ด ํด๋์ค๋ ์ฑ๊ธํค์ ๋๋ค"๋ผ๊ณ ๋งํ๋๋ฐ, ์ด๋ ํด๋์ค๊ฐ ์ฑ๊ธํค ๋์์ธ ํจํด์ ๊ตฌํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ธ์คํด์คํ๋ฅผ ๋จ์ผ ๊ฐ์ฒด๋ก ์ ํํ๋ ํด๋์ค๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ก๊น ๋๋ ์ฐ๊ฒฐ์ ๋ด๋นํ๋ ํด๋์ค ์ฑ๊ธํค ๋์์ธ ํจํด์ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ฑ๊ธํค์ ๋ค์ ๋ ๊ฐ์ง ์์ ์ ์ํํ๋ ๋์์ธ ํจํด์ ๋๋ค.-
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์์ ๋ณด์ฅํฉ๋๋ค.
-
ํด๋น ์ธ์คํด์ค์ ๋ํ ๊ธ๋ก๋ฒ ์ก์ธ์ค์ ๋จ์ผ ์ง์ ์ ์ ๊ณตํฉ๋๋ค.
-
๊ฐ์ธ ์์ฑ์. ์ด๋ ํด๋์ค ์์ฒด ์ธ๋ถ์์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ ํํฉ๋๋ค.
-
ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๊ณต์ฉ ์ ์ ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ฅผ getInstance ๋ผ๊ณ ํฉ๋๋ค . ์ด๊ฒ์ ํด๋์ค ์ธ์คํด์ค์ ๋ํ ์ ์ญ ์ก์ธ์ค ์ง์ ์ ๋๋ค.
๊ตฌํ ์ต์
์ฑ๊ธํค ๋์์ธ ํจํด์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. ๊ฐ ์ต์ ์ ๋๋ฆ๋๋ก ์ข๊ณ ๋์ฉ๋๋ค. ํญ์ ๊ทธ๋ ๋ฏ์ด ์๋ฒฝํ ์ต์ ์ ์์ง๋ง ํ๋๋ฅผ ์ํด ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค. ์ฐ์ , ์ข์ ๊ฒ๊ณผ ๋์ ๊ฒ์ ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ ๋์์ธ ํจํด์ ๋ค์ํ ๊ตฌํ์ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ํฅ์ ๋ฏธ์น๋ ๋ฉํธ๋ฆญ์ ๊ฒฐ์ ํฉ์๋ค. ์ข์ ๊ฒ๋ถํฐ ์์ํฉ์๋ค. ๋ค์์ ๊ตฌํ์ ๋ณด๋ค ํ๋ถํ๊ณ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋๋ ์์์ ๋๋ค.-
์ง์ฐ ์ด๊ธฐํ: ํ์ํ ๋๊น์ง ์ธ์คํด์ค๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
-
๊ฐ๋จํ๊ณ ํฌ๋ช ํ ์ฝ๋: ๋ฌผ๋ก ์ด ๋ฉํธ๋ฆญ์ ์ฃผ๊ด์ ์ด์ง๋ง ์ค์ํฉ๋๋ค.
-
์ค๋ ๋ ์์ ์ฑ: ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ๋ฐ๋ฅธ ์๋.
-
๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์ ๊ณ ์ฑ๋ฅ: ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ๋ ์ค๋ ๋ ์ฐจ๋จ์ด ๊ฑฐ์ ๋๋ ์ ํ ์์ต๋๋ค.
-
์ง์ฐ ์ด๊ธฐํ ์์: ํ์ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์์ฉ ํ๋ก๊ทธ๋จ ์์ ์ ํด๋์ค๊ฐ ๋ก๋๋ ๋(์ญ์ค์ ์ผ๋ก IT ์ธ๊ณ์์๋ ๊ฒ์ผ๋ฅธ ๊ฒ์ด ์ข์ต๋๋ค)
-
๋ณต์กํ๊ณ ์ฝ๊ธฐ ์ด๋ ค์ด ์ฝ๋. ์ด ์งํ๋ ์ฃผ๊ด์ ์ ๋๋ค. ๋์์ ํผ๊ฐ ๋๊ธฐ ์์ํ๋ฉด ๊ตฌํ์ด ์ต์ ์ด ์๋๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
-
์ค๋ ๋ ์์ ์ฑ์ด ๋ถ์กฑํฉ๋๋ค. ์ฆ, "์ค๋ ๋ ์ํ"์ ๋๋ค. ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์๋ชป๋ ์์ ์ ๋๋ค.
-
๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฑ๋ฅ ์ ํ: ์ค๋ ๋๋ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ๋ ํญ์ ๋๋ ์์ฃผ ์๋ก๋ฅผ ์ฐจ๋จํฉ๋๋ค.
์ํธ
์ด์ ๋ค์ํ ๊ตฌํ ์ต์ ์ ๊ณ ๋ คํ๊ณ ์ฅ๋จ์ ์ ํ์ํ ์ค๋น๊ฐ ๋์์ต๋๋ค.๋จ์ํ
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
}
๊ฐ์ฅ ๊ฐ๋จํ ๊ตฌํ. ์ฅ์ :
-
๊ฐ๋จํ๊ณ ํฌ๋ช ํ ์ฝ๋
-
์ค๋ ๋ ์์ ์ฑ
-
๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณ ์ฑ๋ฅ
- ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ๊ฐ ์์ต๋๋ค.
์ง์ฐ ์ด๊ธฐํ
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {}
public static Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
์ฅ์ :
-
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ.
-
์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์
๋๊ธฐํ๋ ์ก์ธ์ค
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
์ฅ์ :
-
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ.
-
์ค๋ ๋ ์์ ์ฑ
-
๋ฉํฐ์ค๋ ๋ ์ฑ๋ฅ ์ ํ
์ด์ค ํ์ธ ์ ๊ธ
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {
}
public static Singleton getInstance() {
if (INSTANCE == null) {
synchronized (Singleton.class) {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
์ฅ์ :
-
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ.
-
์ค๋ ๋ ์์ ์ฑ
-
๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณ ์ฑ๋ฅ
-
Java 1.5 ์ดํ ์ด์ ๋ฒ์ ์์๋ ์ง์ํ์ง ์์(1.5 ๋ฒ์ ๋ถํฐ volatile ํค์๋ ์ฌ์ฉ์ด ์์ ๋จ)
ํด๋์ค ํ๋
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}
์ฅ์ :
-
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ.
-
์ค๋ ๋ ์์ .
-
๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณ ์ฑ๋ฅ.
-
์ฌ๋ฐ๋ฅธ ์์ ์ ์ํด์๋ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ์ค๋ฅ ์์ด ์ด๊ธฐํ๋๋ค๋ ๋ณด์ฅ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด getInstance ๋ฉ์๋ ์ ๋ํ ์ฒซ ๋ฒ์งธ ํธ์ถ ์์ ExceptionInInitializerError ๊ฐ ๋ฐ์ ํ๊ณ ๋ชจ๋ ํ์ ํธ์ถ์์ NoClassDefFoundError ๊ฐ ๋ฐ์ํฉ๋๋ค .
๊ตฌํ | ์ง์ฐ ์ด๊ธฐํ | ์ค๋ ๋ ์์ ์ฑ | ๋ฉํฐ์ค๋ ๋ ์ฑ๋ฅ | ์ธ์ ์ฌ์ฉํฉ๋๊น? |
---|---|---|---|---|
๋จ์ํ | - | + | ๋น ๋ฅธ | ์ ๋. ๋๋ ์ง์ฐ ์ด๊ธฐํ๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ์ฝ ๋์์ง์ง ์์ ๊ฒ์ ๋๋ค. |
์ง์ฐ ์ด๊ธฐํ | + | - | ํด๋น ์์ | ๋ฉํฐ์ค๋ ๋ฉ์ด ํ์ํ์ง ์์ ๋ ํญ์ |
๋๊ธฐํ๋ ์ก์ธ์ค | + | + | ๋๋ฆฐ | ์ ๋. ๋๋ ๋ฉํฐ์ค๋ ๋ ์ฑ๋ฅ์ด ์ค์ํ์ง ์์ ๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ์ฝ ๋์์ง์ง ์์ ๊ฒ์ ๋๋ค. |
์ด์ค ํ์ธ ์ ๊ธ | + | + | ๋น ๋ฅธ | ๋๋ฌผ๊ฒ ์ฑ๊ธํค์ ์์ฑํ ๋ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ(ํด๋์ค ํ๋ ์ฑ๊ธํค์ด ์ ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ) |
ํด๋์ค ํ๋ | + | + | ๋น ๋ฅธ | ๋ฉํฐ์ค๋ ๋ฉ์ด ํ์ํ ๋๋ง๋ค ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ๋ฌธ์ ์์ด ์์ฑ๋๋ค๋ ๋ณด์ฅ์ด ์์ต๋๋ค. |
์ฑ๊ธํค ํจํด์ ์ฅ๋จ์
์ผ๋ฐ์ ์ผ๋ก ์ฑ๊ธํค์ ์์๋๋ก ์ ํํ ์ํํฉ๋๋ค.-
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์์ ๋ณด์ฅํฉ๋๋ค.
-
ํด๋น ์ธ์คํด์ค์ ๋ํ ๊ธ๋ก๋ฒ ์ก์ธ์ค์ ๋จ์ผ ์ง์ ์ ์ ๊ณตํฉ๋๋ค.
-
์ฑ๊ธํค์ ๋จ์ผ ์ฑ ์ ์์น์ ์๋ฐํฉ๋๋ค. ์ง์ ์ ์ธ ์๋ฌด ์ธ์๋ ์ฑ๊ธํค ํด๋์ค๋ ์ธ์คํด์ค ์๋ฅผ ์ ์ดํฉ๋๋ค.
-
์ฑ๊ธํค์ ๋ํ ์ผ๋ฐ ํด๋์ค์ ์ข ์์ฑ์ ํด๋์ค์ ๊ณต๊ฐ ๊ณ์ฝ์์ ๋ณผ ์ ์์ต๋๋ค.
-
์ ์ญ ๋ณ์๊ฐ ์๋ชป๋์์ต๋๋ค. ๊ถ๊ทน์ ์ผ๋ก ์ฑ๊ธํค์ ์์ฒญ๋ ์ ์ญ ๋ณ์๊ฐ ๋ฉ๋๋ค.
-
์ฑ๊ธํค์ ์กด์ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ํนํ ์ฑ๊ธํค์ ์ฌ์ฉํ๋ ํด๋์ค์ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๊ฐ์์ํต๋๋ค.
GO TO FULL VERSION