๐ก ๋์์ธ ํจํด์ด๋?: ํ๋ก๊ทธ๋จ ์ค๊ณํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ค์ ๊ฐ์ฒด ๊ฐ์ ์ํธ ๊ด๊ณ ๋ฑ์ ์ด์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋๋ก ํ๋์ ๊ท์ฝ ํํ๋ก ๋ง๋ค์ด ๋์ ๊ฒ์ ์๋ฏธํ๋ค!
์ฑ๊ธํค ํจํด
: ํ๋์ ํด๋์ค์ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ํจํด์ด๋ค.
- ํ๋์ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ์ ์ธ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์์ง๋ง, ๊ทธ๋ ๊ฒ ํ์ง ์๊ณ ํ๋์ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ก์ง์ ๋ง๋๋ ๋ฐ ์ฐ์ด๋ฉฐ, ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋์ ๋ง์ด ์ฌ์ฉ๋๋ค!
์ฅ์
- ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ๋๊ณ ํด๋น ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ๊ณต์ ํ๋ฉฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ฑํ ๋ ๋น์ฉ์ด ์ ๊ฒ ์ฆ
๋จ์
- ๋ชจ๋ ๊ฐ ๊ฒฐํฉ์ ๊ฐํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์์กด์ฑ(์ข ์์ฑ)์ด ๋์์ง
- TDD๋ฅผ ํ ๋ ๊ฑธ๋ฆผ๋์ด ๋จ
- ๋จ์ ํ ์คํธ๋ ํ ์คํธ๊ฐ ์๋ก ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ฉฐ ์ด๋ค ์์๋ก๋ ํ ์คํธ๋ฅผ ์คํํ ์ ์์ด์ผ ํ์ง๋ง,
- ์ฑ๊ธํค ํจํด์ ๋ฏธ๋ฆฌ ์์ฑ๋ ํ๋์ ์ธ์คํด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ ํจํด์ด๋ฏ๋ก ๊ฐ ํ ์คํธ๋ง๋ค ๋ ๋ฆฝ์ ์ธ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ๊ฐ ์ด๋ ค์
์์ ์ฝ๋
class Singleton {
private static class singleInstanceHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return singleInstanceHolder.INSTANCE;
}
}
public class HelloWorld{
public static void main(String []args){
Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
System.out.println(a.hashCode());
System.out.println(b.hashCode());
if (a == b){
System.out.println(true);
}
}
}
์ค์ฒฉ ํด๋์ค๋ฅผ ์ด์ฉํด์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ๋์ค์ ์
- singleInstanceHolder ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ๋ง ๋ก๋๋จ
- ์ฑ๊ธํค ํด๋์ค์ ์ธ์คํด์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ๋น ํ๋๋ง ์กด์ฌ
- ํด๋์ค๊ฐ ๋๋ฒ ๋ก๋๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ ์ค๋ ๋๊ฐ ๋์ผํ JVM์์ 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์
- ์ฑ๊ธํค ํด๋์ค๊ฐ ๋ก๋๋ ๋ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ง ์๊ณ ์ด๋ ํ ๋ชจ๋์์ getInstance() ๋ฉ์๋๊ฐ ํธ์ถํ ๋ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ต์ด ์์ฑ ๋ฐ ๋ฆฌํดํ๊ฒ ๋จ
์์กด์ฑ ์ฃผ์
- ์์ ๋จ์ ๊ณผ ๊ฐ์ด ์ฑ๊ธํค ํจํด์ ๊ฒฐํฉ๋๊ฐ ๋๋ค๋ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์์กด์ฑ ์ฃผ์ ์ ํตํด ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ์ ์กฐ๊ธ ๋ ๋์จํ๊ฒ ๋ง๋ค ์ ์์
- ๋ฉ์ธ ๋ชจ๋์ด ์ง์ ๋ค๋ฅธ ํ์ ๋ชจ๋์ ๋ํ ์์กด์ฑ์ ์ฃผ๊ธฐ๋ณด๋ค๋
- ์ค๊ฐ์ ์์กด์ฑ ์ฃผ์ ์๊ฐ ์ด ๋ถ๋ถ์ ๊ฐ๋ก์ฑ ๋ฉ์ธ ๋ชจ๋์ด ๊ฐ์ ์ ์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์
์ฅ์
- ๋ชจ๋๋ค์ ์ฝ๊ฒ ๊ต์ฒดํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋์ด ํ ์คํ ํ๊ธฐ ์ฝ๊ณ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ๋ ์์ํด์ง
- ๊ตฌํํ ๋ ์ถ์ํ ๋ ์ด์ด๋ฅผ ๋ฃ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด ์ฃผ๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์์กด์ฑ ๋ฐฉํฅ์ด ์ผ๊ด๋จ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์์
- ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ค์ด ์กฐ๊ธ ๋ ๋ช ํํด์ง
๋จ์
- ๋ชจ๋๋ค์ด ๋์ฑ ๋ ๋ถ๋ฆฌ๋๋ฏ๋ก ํด๋์ค ์๊ฐ ๋์ด๋ ๋ณต์ก์ฑ์ด ์ฆ๊ฐ๋ ์ ์์
- ์ฝ๊ฐ์ ๋ฐํ์ ํจ๋ํฐ๊ฐ ์๊ธฐ๊ธฐ๋ํจ
์์กด์ฑ ์ฃผ์ ์์น
“์์ ๋ชจ๋์ ํ์ ๋ชจ๋์์ ์ด๋ ํ ๊ฒ๋ ๊ฐ์ ธ์ค์ง ์์์ผ ํ๊ณ ๋ ๋ค ์ถ์ํ์ ์์กดํด์ผ ํ๋ฉฐ, ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํ์ง ๋ง์์ผ ํ๋ค”