์ฑ๊ธํด ํจํด
โข
ํด๋์ค ํ๋๋น ํ๋์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ฒ ํ๋ ํจํด
โข
Java์์๋ ๋ณดํต ์์ฑ์๋ฅผ private์ผ๋ก ์ ์ธํ๊ณ ํด๋น Classํ์
์ instance๋ฅผ ๋ด๋ถ์ ๋ง๋ค๊ณ getInstance๋ก ์ฑ๊ธํด ๊ฐ์ฒด๋ฅผ ์ป์ด๋ด๋ ๋ฐฉ์์ ์์ฃผ ์ด๋ค.
โข
DBCP(DataBase ConnectionPool), ์ฐ๋ ๋ํ์ฒ๋ผ ๊ณตํต๋ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํด์ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์์ ๋ง์ด ์ฌ์ฉ
โข
Spring ์ปจํ
์ด๋์ ์ฑ๊ธํค ๋น์ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋ค. Java ํด๋์ค ๋ก๋์ ์ฑ๊ธํค ๊ฐ์ฒด๋ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐํ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
public class Something {
private Something() {
}
private static class LazyHolder {
public static final Something INSTANCE = new Something();
}
public static Something getInstance() {
return LazyHolder.INSTANCE;
}
}
Java
๋ณต์ฌ
โข
์ฅ์
โฆ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝ ํ ์ ์๋ค.
โฆ
์ ์ญ ์ธ์คํด์ค์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ฝ๋ค.
โข
๋จ์
โฆ
์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ์ํฌ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค๋ค ๊ฐ์ ๊ฒนํฉ๋๊ฐ ๋์์ ธ OCP์์น์ ์๋ฐฐํ๊ฒ ๋๋ค.
โฆ
์๊ธฐ ์์ ์ ์ธ์คํด์ค๋ฅผ new๋ก ์ง์ ์์ฑํ๊ธฐ ๋๋ฌธ์ DIP ์์น์๋ ์ด๊ธ๋๋ค.
โฆ
์ด๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ด๊ธ๋๊ธฐ ๋๋ฌธ์ ์์ ์ด ์ด๋ ค์์ง๊ณ ์ ์ง๋ณด์์ ๋น์ฉ์ด ๋์์ง ์ ์๋ค.
โฆ
๋ํ, ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ์ฒ๋ฆฌ๋ฅผ ์ํ๋ฉด ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ๊ฐ ์์ฑ ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ๊ฒ ๋๋ค.
ํฉํฐ๋ฆฌ ํจํด
โข
๊ฐ์ฒด๋ฅผ ์์ฑ ํ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๊ฒฐํฉ๋(์์กด์ฑ)๋ฅผ ๋ฎ์ถ๊ณ ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ๋ ํ์๋ฅผ ์ต์ํ ํ๊ธฐ ์ํ ํจํด์ด๋ค.
โข
๋ง์ฝ ํด๋ผ์ด์ธํธ ์ฝ๋์ ํน์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ์์ฑ/์์ ํ๋ค๊ณ ํ๋ฉด 1000๊ฐ๋ฅผ ์์ฑํ์ผ๋ฉด 1000๊ฐ๋ฅผ ์์ ํด์ผ ๋๋๋ฐ ํฉํฐ๋ฆฌ ํจํด์ ์ด์ฉํ๋ฉด ํฉํฐ๋ฆฌ๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ 1๋ฒ๋ง ์์ ํ๋ฉด ๋๋ค.
โข
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ํฉํฐ๋ฆฌ์์ ๋ด์ฉ์ ๋ณ๊ฒฝํด์ผ ๋๋ฉด ํฉํฐ๋ฆฌ ์ ์ฒด๋ฅผ ์์ ํด์ผ ๋๋ ๋ฌธ์ ์ ์ด ์๋ค. ํฉํฐ๋ฆฌ ์์ ๋คํ์ฑ์ผ๋ก ์์ฐํ๋ ๊ฐ์ฒด๊ฐ 1000๊ฐ๊ฐ ์๋ค๋ฉด 1000๊ฐ๋ฅผ ๋ค ์์ ํด์ผ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ถ์ ํฉํฐ๋ฆฌ ํจํด์ ์จ์ ํฉํฐ๋ฆฌ ํจํด์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ฒ์ ๊ตฌํํ๋ ํฉํฐ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐฉ์์ ์ด๋ค.