๐น ์์ฝ
โฝ ๋์์ฑ๊ณผ ๊น๋ํ ์ฝ๋๋ ์๋ฆฝํ๊ฒ ์ด๋ ต๋ค.
โฝ ์ค๋ ๋๋ฅผ ํ๋๋ง ์คํํ๋ ์ฝ๋๋ ์ง๊ธฐ๊ฐ ์ฝ๋ค. ๊ฒ์ผ๋ก ๋ณด๊ธฐ์๋ ๋ฉ์ฉกํ๋ ๊น์ํ ๊ณณ์ ๋ฌธ์ ๊ฐ ์๋ ๋ค์ค ์ค๋ ๋ ์ฝ๋๋ ์ง๊ธฐ ์ฝ๋ค. ์ด๋ฐ ์ฝ๋๋ ์์คํ ์ด ๋ถํ๋ฅผ ๋ฐ๊ธฐ ์ ๊น์ง ๋ฉ์ฉกํ๊ฒ ๋์๊ฐ๋ค.
๐น์ด ์ฅ์์ ๋ค๋ฃฐ ๋ด์ฉ
โฝ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๋์์ ๋๋ฆฌ๋ ์ด์
โฝ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๋์์ ๋๋ฆฌ๋ ์ด๋ ค์
โฝ ๋์์ฑ์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฌธ์ ์
๋์์ฑ์ด ํ์ํ ์ด์ ?
- ๋์์ฑ์ ๊ฒฐํฉ(coupling)์ ์์ ๋ ์ ๋ต์ด๋ค.
- ์ฆ, ๋ฌด์(what)๊ณผ ์ธ์ (when)์ ๋ถ๋ฆฌํ๋ ์ ๋ต์ด๋ค.
- ์ค๋ ๋๊ฐ ํ๋์ธ ํ๋ก๊ทธ๋จ์ ๋ฌด์๊ณผ ์ธ์ ๊ฐ ์๋ก ๋ฐ์ ํ๋ค. ๊ทธ๋์ ํธ์ถ ์คํ์ ์ดํด๋ณด๋ฉด ํ๋ก๊ทธ๋จ ์ํ๊ฐ ๊ณง๋ฐ๋ก ๋๋ฌ๋๋ค.
- ํํ ๋จ์ผ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ ๋๋ฒ๊น ํ๋ ํ๋ก๊ทธ๋๋จธ๋ ์ ์ง์ (breakpoint)์ ์ ํ ํ ์ด๋ ์ ์ง์ ์ ๊ฑธ๋ ธ๋์ง ๋ณด๋ฉฐ ์์คํ ์ํ๋ฅผ ํ์ ํ๋ค.
- ๋ฌด์๊ณผ ์ธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์กฐ์ ํจ์จ์ด ๊ทน์ ์ผ๋ก ๋์์ง๋ค.
- ๊ตฌ์กฐ์ ์ธ ๊ด์ ์์ ํ๋ก๊ทธ๋จ์ ๊ฑฐ๋ํ ๋ฃจํ ํ๋๊ฐ ์๋๋ผ ์์ ํ๋ ฅ ํ๋ก๊ทธ๋จ ์ฌ๋ฟ์ผ๋ก ๋ณด์ธ๋ค.
- ๋ฐ๋ผ์ ์์คํ ์ ์ดํดํ๊ธฐ๊ฐ ์ฝ๊ณ ๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ๋ ์ฝ๋ค.
- ๐ก ์์) ์๋ธ๋ฆฟ(Servlet) ๋ชจ๋ธ
โฝ ์๋ธ๋ฆฟ์ ์น ํน์ EJB ์ปจํ ์ด๋(Enterprise JavaBeans)๋ผ๋ ์ฐ์ฐ ์๋์ ๋์๊ฐ๋๋ฐ ์ด๋ค ์ปจํ ์ด๋๋ ๋์์ฑ์ ๋ถ๋ถ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
โฝ ์น ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์น ์๋ฒ๋ ๋น๋๊ธฐ์์ผ๋ก ์๋ธ๋ฆฟ์ ์คํํ๋ค.
โฝ ์๋ธ๋ฆฟ ํ๋ก๊ทธ๋๋จธ๋ ๋ค์ด์ค๋ ๋ชจ๋ ์น ์์ฒญ์ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค.
โฝ ์์น์ ์ผ๋ก ๊ฐ ์๋ธ๋ฆฟ ์ค๋ ๋๋ ๋ค๋ฅธ ์๋ธ๋ฆฟ ์ค๋ ๋์ ๋ฌด๊ดํ๊ฒ ์์ ๋ง์ ์ธ์์์ ๋์๊ฐ๋ค.
โฝ ๊ทธ๋ฌ๋ฉด ๋์์ฑ์ด ํ์ ์์๊น? ์๋๋ค!
โช ์ค์ ๋ก ์น ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ ๊ฒฐํฉ ๋ถ๋ฆฌ(decoupling) ์ ๋ต์ ์๋ฒฝ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ ์์ฃผ ๋ฉ๋ค.
โช ์๋ธ๋ฆฟ ํ๋ก๊ทธ๋๋จธ๋ ๋์์ฑ์ ์ ํํ ๊ตฌํํ๋๋ก ๊ฐ๋ณํ ์ฃผ์์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ฌ์ผ ํ๋ค.
โช ๊ทธ๋ผ์๋ ์๋ธ๋ฆฟ ๋ชจ๋ธ์ด ์ ๊ณตํ๋ ๊ตฌ์กฐ์ ์ด์ ์ ์์ฃผ ํฌ๋ค.
๊ตฌ์กฐ์ ๊ฐ์ ๋ง์ ์ํด ๋์์ฑ์ ์ฑํํ๋ ๊ฑด ์๋๋ค.
- ์ด๋ค ์์คํ ์ ์๋ต ์๊ฐ๊ณผ ์์ ์ฒ๋ฆฌ๋ (throughput) ๊ฐ์ ์ด๋ผ๋ ์๊ตฌ์ฌํญ์ผ๋ก ์ธํด ์ง์ ์ ์ธ ๋์์ฑ ๊ตฌํ์ด ๋ถ๊ฐํผํ๋ค.
๐ก ์์1) ๋งค์ผ ์๋ง์ ์น ์ฌ์ดํธ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์์ฝํ๋ ์ ๋ณด ์์ง๊ธฐ
- ์์ง๊ธฐ๊ฐ ๋จ์ผ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๋ฉด?
- ํ ๋ฒ์ ํ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ด ๊ณผ์ ์์ ํ ์ฌ์ดํธ๋ฅผ ๋๋ด์ผ ๋ค์ ์ฌ์ดํธ๋ก ๋์ด๊ฐ๋ค.
- ์น ์ฌ์ดํธ๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ฉด ์ ๋ณด ์์งํ๋ ์๊ฐ๋ ๋์ด๋๊ณ , ๋งค์ผ ์คํํ๋ฏ๋ก 24์๊ฐ ์์ ๋๋์ผ ํ์ง๋ง 24์๊ฐ์ ๋๊ธฐ๊ฒ ๋๋ค.
- ๋จ์ผ ์ค๋ ๋ ์์ง๊ธฐ๋ ์น ์์ผ์์ ์ ์ถ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ์์ฃผ ๋ง๋ค. ๋ค์ค ์ค๋ ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์์ง๊ธฐ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
๐ก ์์ 2) ํ ๋ฒ์ ํ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ๋ ์์คํ : ํ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ๋ ์๊ฐ์ 1์ด
- ์ฌ์ฉ์๊ฐ ์์๋ผ๋ฉด ์์คํ ์ด ์์ฃผ ๋นจ๋ฆฌ ๋ฐ์ํ์ง๋ง, ์ฌ์ฉ์ ์๊ฐ ๋์ด๋ ์๋ก ์์คํ ์ด ์๋ตํ๋ ์๋๋ ๋ฆ์ด์ง๋ค.
- 150๋ช ๋ค์ ์ค ์๋ ค๋ ์ฌ์ฉ์๋ ์๋ค. ๋์ ๋ง์ ์ฌ์ฉ์๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ฉด ์์คํ ์๋ต ์๊ฐ์ ๋์ผ ์ ์๋ค.
๐ก ์์ 3) ์ ๋ณด๋ฅผ ๋๋์ผ๋ก ๋ถ์ํ๋ ์์คํ
- ๋ชจ๋ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ ํ์์ผ ์ต์ข ์ ์ธ ๋ต์ ๋ผ ์ ์๋ค. ์ ๋ณด๋ฅผ ๋๋ ์ฌ๋ฌ ์ปดํจํฐ์์ ๋๋ฆฌ๋ฉด ์ด๋จ๊น? ๋๋์ ์ ๋ณด๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด?
๋ฏธ์ ๊ณผ ์คํด
- ๋์์ฑ์ ํญ์ ์ฑ๋ฅ์ ๋์ฌ์ค๋ค?
- ๋์์ฑ์ ๋๋ก ์ฑ๋ฅ์ ๋์ฌ์ค๋ค.
- ๋๊ธฐ ์๊ฐ์ด ์์ฃผ ๊ธธ์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํ๋ก์ธ์๋ฅผ ๊ณต์ ํ ์ ์๊ฑฐ๋, ์ฌ๋ฌ ํ๋ก์ธ์๊ฐ ๋์์ ์ฒ๋ฆฌํ ๋ ๋ฆฝ์ ์ธ ๊ณ์ฐ์ด ์ถฉ๋ถํ ๋ง์ ๊ฒฝ์ฐ์๋ง ์ฑ๋ฅ์ด ๋์์ง๋ค. (์ผ์์ ์ผ๋ก ๋ฐ์ํ๋ ์ํฉ์ ์๋๋ค)
- ๋์์ฑ์ ๊ตฌํํด๋ ์ค๊ณ๋ ๋ณํ์ง ์๋๋ค.
- ๋จ์ผ ์ค๋ ๋ ์์คํ ๊ณผ ๋ค์ค ์ค๋ ๋ ์์คํ ์ ์ค๊ณ๊ฐ ํ์ดํ๊ฒ ๋ค๋ฅด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์๊ณผ ์ธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์์คํ ๊ตฌ์กฐ๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค.
- ์น ๋๋ EJB ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ฑ์ ์ดํดํ ํ์๊ฐ ์๋ค.
- ์ค์ ๋ก๋ ์ปจํ ์ด๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง, ์ด๋ป๊ฒ ๋์ ์์ , ๋ฐ๋๋ฝ ๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋์ง ์์์ผ๋ง ํ๋ค.
- ๋์์ฑ์ ๋ํ ํ๋นํ ์๊ฐ ๋ช ๊ฐ์ง
- ๋์์ฑ์ ๋ค์ ๋ถํ๋ฅผ ์ ๋ฐํ๋ค. ์ฑ๋ฅ ์ธก๋ฉด์์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๋ฉฐ, ์ฝ๋๋ ๋ ์ง์ผํ๋ค.
- ๋์์ฑ์ ๋ณต์กํ๋ค. ๊ฐ๋จํ ๋ฌธ์ ๋ผ๋ ๋์์ฑ์ ๋ณต์กํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋์์ฑ ๋ฒ๊ทธ๋ ์ฌํํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋์ ์ง์ง ๊ฒฐํจ์ผ๋ก ๊ฐ์ฃผ๋์ง ์๊ณ ์ผํ์ฑ ๋ฌธ์ ๋ก ์ฌ๊ฒจ ๋ฌด์ํ๊ธฐ ์ฝ๋ค.
- ๋์์ฑ์ ๊ตฌํํ๋ ค๋ฉด ํํ ๊ทผ๋ณธ์ ์ธ ์ค๊ณ ์ ๋ต์ ์ฌ๊ณ ํด์ผ ํ๋ค.
๋๊ด
๋์์ฑ์ ๊ตฌํํ๊ธฐ ์ด๋ ค์ด ์ด์
public class X {
private int lastIdUsed;
public int getNextId() {
return ++lastIdUsed;
}
}
- ์ธ์คํด์ค X๋ฅผ ์์ฑํ๊ณ , lastIdUsed ํ๋๋ฅผ 42๋ก ์ค์ ํ ๋ค์, ๋ ์ค๋ ๋๊ฐ ํด๋น ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๋ค. ์ด์ ๋ ์ค๋ ๋๊ฐ getNextId();๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํ์. ๊ฒฐ๊ณผ๋ ์
์ค ํ๋๋ค.
- ํ ์ค๋ ๋๋ 43์ ๋ฐ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋๋ 44๋ฅผ ๋ฐ๋๋ค. lastIdUsed๋ 44๊ฐ ๋๋ค.
- ํ ์ค๋ ๋๋ 44๋ฅผ ๋ฐ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋๋ 43์ ๋ฐ๋๋ค. lastIdUsed๋ 44๊ฐ ๋๋ค.
- ํ ์ค๋ ๋๋ 43์ ๋ฐ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋๋ 43์ ๋ฐ๋๋ค. lastIdUsed๋ 43์ด ๋๋ค. ๐ค
๋ ์ค๋ ๋๊ฐ ๊ฐ์ ๋ณ์๋ฅผ ๋์์ ์ฐธ์กฐํ๋ฉด ์ธ ๋ฒ์งธ์ ๊ฐ์ ๋๋ผ์ด ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ค! ๋ ์ค๋ ๋๊ฐ ์๋ฐ ์ฝ๋ ํ ์ค์ ๊ฑฐ์ณ๊ฐ๋ ๊ฒฝ๋ก๋ ์์์ด ๋ง์๋ฐ, ๊ทธ์ค์์ ์ผ๋ถ ๊ฒฝ๋ก๊ฐ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ์ดํธ ์ฝ๋๋ง ๊ณ ๋ คํ์ ๋ ๋ ์ค๋ ๋๊ฐ getNextId ๋ฉ์๋๋ฅผ ์คํํ๋ ์ ์ฌ์ ์ธ ๊ฒฝ๋ก๋ int์ผ ๊ฒฝ์ฐ ์ต๋ 12870๊ฐ์ ๋ฌํ๋ค. long์ผ ๊ฒฝ์ฐ๋ ์กฐํฉ ๊ฐ๋ฅํ ๊ฒฝ๋ก ์๊ฐ 2,704,156๊ฐ๋ก ์ฆ๊ฐํ๋ค! ๋ฌผ๋ก ๋๋ค์ ๊ฒฝ๋ก๋ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋์ง๋ง, ๋ฌธ์ ๋ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋๋ ์ผ๋ถ ๊ฒฝ๋ก๋ค.
๋์์ฑ์ ๊ตฌํํ๊ธฐ ์ด๋ ค์ด ์ด์
๐น ๊ทธ๋ ๋ค๋ฉด ๋์์ฑ ์ฝ๋๊ฐ ์ผ์ผํค๋ ๋ฌธ์ ๋ก๋ถํฐ ์ด๋ป๊ฒ ์์คํ ์ ๋ฐฉ์ดํ ์ ์์๊น?
- ๋จ์ผ ์ฑ
์ ์์นSingle Responsibility Principle, SRP
- SRP: ์ฃผ์ด์ง ๋ฉ์๋/ํด๋์ค/์ปดํฌ๋ํธ๋ฅผ ๋ณ๊ฒฝํ ์ด์ ๋ ํ๋์ฌ์ผ ํ๋ค๋ ์์น
- ๋์์ฑ์ ๋ณต์ก์ฑ ํ๋๋ง์ผ๋ก๋ ๋ฐ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ๋์์ฑ์ ๊ตฌํํ ๋ ๊ณ ๋ คํด์ผํ ์ฌํญ
- ๋์์ฑ ์ฝ๋๋ ๋ ์์ ์ธ ๊ฐ๋ฐ, ๋ณ๊ฒฝ, ์กฐ์จ ์ฃผ๊ธฐ๊ฐ ์๋ค.
- ๋์์ฑ ์ฝ๋์๋ ๋ ์์ ์ธ ๋๊ด์ด ์๋ค. ๋ค๋ฅธ ์ฝ๋์์ ๊ฒช๋ ๋๊ด๊ณผ ๋ค๋ฅด๋ฉฐ ํจ์ฌ ์ด๋ ต๋ค.
- ์๋ชป ๊ตฌํํ ๋์์ฑ ์ฝ๋๋ ๋ณ์๋ณ ๋ฐฉ์์ผ๋ก ์คํจํ๋ค. ์ฃผ๋ณ์ ์๋ ๋ค๋ฅธ ์ฝ๋๊ฐ ๋ฐ๋ชฉ์ ์ก์ง ์๋๋ผ๋ ๋์์ฑ ํ๋๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ด๋ ต๋ค.
- ๋ฐ๋ฆ ์ ๋ฆฌcorollary: ์๋ฃ ๋ฒ์๋ฅผ ์ ํํ๋ผ
- ๊ฐ์ฒด ํ๋๋ฅผ ๊ณต์ ํ ํ ๋์ผ ํ๋๋ฅผ ์์ ํ๋ ๋ ์ค๋ ๋๊ฐ ์๋ก ๊ฐ์ญํ๋ฏ๋ก ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋๋๋ค.
- ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ผ๋ก ๊ณต์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ๋ด ์๊ณ ์์ญ(critical section)์ synchronized ํค์๋๋ก ๋ณดํธํ๋ผ๊ณ ๊ถ์ฅํ๋ค.
- ์ด๋ฐ ์๊ณ์์ญ์ ์๋ฅผ ์ค์ด๋ ๊ธฐ์ ์ด ์ค์ํ๋ค.
- ๊ณต์ ์๋ฃ๋ฅผ ์์ ํ๋ ์์น๊ฐ ๋ง์์๋ก ์ปค์ง๋ ๋ฌธ์ ์
-
- ๋ณดํธํ ์๊ณ์์ญ์ ๋นผ๋จน๋๋ค. ๊ทธ๋์ ๊ณต์ ์๋ฃ๋ฅผ ์์ ํ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ง๊ฐ๋จ๋ฆฐ๋ค.
- ๋ชจ๋ ์๊ณ์์ญ์ ์ฌ๋ฐ๋ก ๋ณดํธํ๋์ง(DRY ์๋ฐ) ํ์ธํ๋๋ผ ๋๊ฐ์ ๋ ธ๋ ฅ๊ณผ ์๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ค.
- ๊ทธ๋ ์ง ์์๋ ์ฐพ์๋ด๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๊ฐ ๋์ฑ ์ฐพ๊ธฐ ์ด๋ ค์์ง๋ค.
-
- ๋ฐ๋ฆ ์ ๋ฆฌ: ์๋ฃ ์ฌ๋ณธ์ ์ฌ์ฉํ๋ผ
- ๊ณต์ ์๋ฃ๋ฅผ ์ค์ด๋ ค๋ฉด ์ฒ์๋ถํฐ ๊ณต์ ํ์ง ์๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ์ข๋ค.
- ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ๋ฅํ๋ค.
- ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ฐ ์ค๋ ๋๊ฐ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด ์ฌ์ฉํ ํ ํ ์ค๋ ๋๊ฐ ํด๋น ์ฌ๋ณธ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ๋ค.
- ๊ณต์ ์๋ฃ๋ฅผ ์ค์ด๋ ค๋ฉด ์ฒ์๋ถํฐ ๊ณต์ ํ์ง ์๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ์ข๋ค.
- ๋ฐ๋ฆ ์ ๋ฆฌ: ์ค๋ ๋๋ ๊ฐ๋ฅํ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌํํ๋ผ
- ๋ค๋ฅธ ์ค๋ ๋์ ์๋ฃ๋ฅผ ๊ณต์ ํ์ง ์๋๋ค.
- ๊ฐ ์ค๋ ๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ ํ๋๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ๋ชจ๋ ์ ๋ณด๋ ๋น๊ณต์ ์ถ์ฒ์์ ๊ฐ์ ธ์ค๋ฉฐ ๋ก์ปฌ ๋ณ์์ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ ์ค๋ ๋๋ ๋ค๋ฅธ ์ค๋ ๋์ ๋๊ธฐํํ ํ์๊ฐ ์์ผ๋ฏ๋ก ์ธ์์ ์์ ๋ง ์๋ ๋ฏ์ด ๋์๊ฐ ์ ์๋ค.
- ์) HttpServlet ํด๋์ค์์ ํ์ํ ํด๋์ค๋ ๋ชจ๋ ์ ๋ณด๋ฅผ doGet๊ณผ doPost ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค. ๊ทธ๋์ ๊ฐ ์๋ธ๋ฆฟ์ ๋ง์น ์์ ์ด ๋ ์์ ์ธ ์์คํ ์์ ๋์ํ๋ ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์๋ธ๋ฆฟ ์ฝ๋๊ฐ ๋ก์ปฌ ๋ณ์๋ง ์ฌ์ฉํ๋ค๋ฉด ์๋ธ๋ฆฟ์ด ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ ์ ๋ฌดํ๋ค.
- ๋ฌผ๋ก ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๋ ๋๋ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ๊ณผ ๊ฐ์ ์์์ ๊ณต์ ํ๋ ์ํฉ์ ์ฒํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํดํ๋ผ
์๋ฐ 5๋ก ์ค๋ ๋ ์ฝ๋๋ฅผ ๊ตฌํํ๋ค๋ฉด ๋ค์์ ๊ณ ๋ คํ์.
- ์ค๋ ๋ ํ๊ฒฝ์ ์์ ํ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ค. (์๋ฐ 5๋ถํฐ ์ ๊ณตํ๋ค.)
- ์๋ก ๋ฌด๊ดํ ์์ ์ ์ํํ ๋๋ executor ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ๋ฅํ๋ค๋ฉด ์ค๋ ๋๊ฐ ์ฐจ๋จ(blocking)๋์ง ์๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- ์ผ๋ถ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋ ๋์ ์์ ํ์ง ๋ชปํ๋ค.
- ์ค๋ ๋ ํ๊ฒฝ์ ์์ ํ ์ปฌ๋ ์
- ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํด๋ ์์ ํ๋ฉฐ, ์ฑ๋ฅ๋ ์ข๋ค.
- ConcurrentHashMap
- ConcurrentHashMap์ ๊ฑฐ์ ๋ชจ๋ ์ํฉ์์ HashMap๋ณด๋ค ๋น ๋ฅด๋ค. ๋์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ์ง์ํ๋ฉฐ, (๋ณดํต ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋) ์์ฃผ ์ฌ์ฉํ๋ ๋ณตํฉ ์ฐ์ฐ์ ๋ค์ค ์ค๋ ๋ ์์์ ์์ ํ๊ฒ ๋ง๋ ๋ฉ์๋๋ก ์ ๊ณตํ๋ค.
ํด๋์ค ์ค๋ช ReentrantLock ํ ๋ฉ์๋์์ ์ ๊ทธ๊ณ ๋ค๋ฅธ ๋ฉ์๋์์ ํธ๋ ๋ฝ(lock)์ด๋ค. Semaphore ์ ํ์ ์ธ ์ธ๋งํฌ์ด๋ค. ๊ฐ์(count)๊ฐ ์๋ ๋ฝ์ด๋ค. CountDownLatch ์ง์ ํ ์๋งํผ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ๋์์ผ ๋๊ธฐ ์ค์ธ ์ค๋ ๋๋ฅผ ๋ชจ๋ ํด์ ํ๋ ๋ฝ์ด๋ค. ๋ชจ๋ ์ค๋ ๋์๊ฒ ๋์์ ๊ณตํํ๊ฒ ์์ํ ๊ธฐํ๋ฅผ ์ค๋ค. - ์คํ ๋ชจ๋ธ์ ์ดํดํ๋ผ
๋ค์ค ์ค๋ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ถ๋ฅํ๋ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋ ผํ๊ธฐ ์ ์ ๋จผ์ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ฉ์ด๋ถํฐ ์ดํดํ์. -
์ฉ์ด ์ค๋ช ํ์ ๋ ์์(Bound Resource) ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ์์์ผ๋ก, ํฌ๊ธฐ๋ ์ซ์๊ฐ ์ ํ์ ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๊ธธ์ด๊ฐ ์ผ์ ํ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ฒํผ ๋ฑ์ด ์๋ค. ์ํธ ๋ฐฐ์ (Mutual Exclusion) ํ ๋ฒ์ ํ ์ค๋ ๋๋ง ๊ณต์ ์๋ฃ๋ ๊ณต์ ์์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๊ธฐ์(Starvation) ํ ์ค๋ ๋๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ต์ฅํ ์ค๋ซ๋์ ํน์ ์์ํ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค. ์๋ฅผ ๋ค์ด, ํญ์ ์งง์ ์ค๋ ๋์๊ฒ ์ฐ์ ์์๋ฅผ ์ค๋ค๋ฉด, ์งง์ ์ค๋ ๋๊ฐ ์ง์์ ์ผ๋ก ์ด์ด์ง ๊ฒฝ์ฐ, ๊ธด ์ค๋ ๋๊ฐ ๊ธฐ์ ์ํ์ ๋น ์ง๋ค. ๋ฐ๋๋ฝ(Deadlock) ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์๋ก ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ฐ๊ธฐ ํ์ํ ์์์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ ์ ํ๋ ๋ฐ๋์ ์ด๋ ์ชฝ๋ ๋ ์ด์ ์งํํ์ง ๋ชปํ๋ค. - ๋ค์ค ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉํ๋ ์คํ ๋ชจ๋ธ
- ์์ฐ์-์๋น์Producer-Consumer
- ํ๋ ์ด์ ์์ฐ์ ์ค๋ ๋๊ฐ ์ ๋ณด๋ฅผ ์์ฐํด ๋ฒํผ(buffer)๋ ๋๊ธฐ์ด(queue)์ ๋ฃ๋๋ค.
- ํ๋ ์ด์ ์๋น์ ์ค๋ ๋๊ฐ ๋๊ธฐ์ด์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ค.
- ์์ฐ์ ์ค๋ ๋์ ์๋น์ ์ค๋ ๋๊ฐ ์ฌ์ฉํ๋ ๋๊ธฐ์ด์ ํ์ ๋ ์์์ด๋ค.
- ์์ฐ์ ์ค๋ ๋๋ ๋๊ธฐ์ด์ ๋น ๊ณต๊ฐ์ด ์์ด์ผ ์ ๋ณด๋ฅผ ์ฑ์ด๋ค. ์ฆ, ๋น ๊ณต๊ฐ์ด ์๊ธธ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- ์๋น์ ์ค๋ ๋๋ ๋๊ธฐ์ด์ ์ ๋ณด๊ฐ ์์ด์ผ ๊ฐ์ ธ์จ๋ค. ์ฆ, ์ ๋ณด๊ฐ ์ฑ์์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋๊ธฐ์ด์ ์ฌ๋ฐ๋ก ์ฌ์ฉํ๊ณ ์ ์์ฐ์ ์ค๋ ๋์ ์๋น์ ์ค๋ ๋๋ ์๋ก์๊ฒ ์๊ทธ๋์ ๋ณด๋ธ๋ค.
- ์์ฐ์ ์ค๋ ๋๋ ๋๊ธฐ์ด์ ์ ๋ณด๋ฅผ ์ฑ์ด ๋ค์ ์๋น์ ์ค๋ ๋์๊ฒ "๋๊ธฐ์ด์ ์ ๋ณด๊ฐ ์๋ค"๋ ์๊ทธ๋์ ๋ณด๋ธ๋ค.
- ์๋น์ ์๊ทธ๋์ ๋๊ธฐ์ด์์ ์ ๋ณด๋ฅผ ์ฝ์ด ๋ค์ธ ํ "๋๊ธฐ์ด์ ๋น ๊ณต๊ฐ์ด ์๋ค"๋ ์๊ทธ๋์ ๋ณด๋ธ๋ค.
- ๋ฐ๋ผ์ ์๋ชปํ๋ฉด ์์ฐ์ ์ค๋ ๋์ ์๋น์ ์ค๋ ๋๊ฐ ๋ ๋ค ์งํ ๊ฐ๋ฅํจ์๋ ๋ถ๊ตฌํ๊ณ ๋์์ ์๋ก์๊ฒ ์๊ทธ๋์ ๊ธฐ๋ค๋ฆด ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
- ํ๋ ์ด์ ์์ฐ์ ์ค๋ ๋๊ฐ ์ ๋ณด๋ฅผ ์์ฐํด ๋ฒํผ(buffer)๋ ๋๊ธฐ์ด(queue)์ ๋ฃ๋๋ค.
- ์ฝ๊ธฐ-์ฐ๊ธฐReaders-Writers
- ์ฝ๊ธฐ ์ค๋ ๋๋ฅผ ์ํ ์ฃผ๋ ์ ๋ณด์์ผ๋ก ๊ณต์ ์์์ ์ฌ์ฉํ์ง๋ง, ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ์ด ๊ณต์ ์์์ ์ด๋ฐ๊ธ ๊ฐฑ์ ํ๋ค๊ณ ํ์. ์ด๋ฐ ๊ฒฝ์ฐ ์ฒ๋ฆฌ์จ(throughput)์ด ๋ฌธ์ ์ ํต์ฌ์ด๋ค.
- ์ฒ๋ฆฌ์จ(throughput)
- ์ฒ๋ฆฌ์จ์ ๊ฐ์กฐํ๋ฉด ๊ธฐ์(starvation) ํ์์ด ์๊ธฐ๊ฑฐ๋ ์ค๋๋ ์ ๋ณด๊ฐ ์์ธ๋ค. ๊ฐฑ์ ์ ํ์ฉํ๋ฉด ์ฒ๋ฆฌ์จ์ ์ํฅ์ ๋ฏธ์น๋ค.
- ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ๊ฐฑ์ ํ๋ ๋์ ์ฝ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ์ฝ์ง ์์ผ๋ ค๋ฉด, ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ์ฝ๋ ๋์ ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ๊ฐฑ์ ํ์ง ์์ผ๋ ค๋ฉด ๋ณต์กํ ๊ท ํ ์ก๊ธฐ๊ฐ ํ์ํ๋ค.
- ๋๊ฐ๋ ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ์ค๋ซ๋์ ์ ์ ํ๋ ๋ฐ๋์ ์ฌ๋ฌ ์ฝ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ผ ์ฒ๋ฆฌ์จ์ด ๋จ์ด์ง๋ค.
- ๋ฐ๋ผ์ ์ฝ๊ธฐ ์ค๋ ๋์ ์๊ตฌ์ ์ฐ๊ธฐ ์ค๋ ๋์ ์๊ตฌ๋ฅผ ์ ์ ํ ๋ง์กฑ์์ผ ์ฒ๋ฆฌ์จ๋ ์ ๋นํ ๋์ด๊ณ ๊ธฐ์๋ ๋ฐฉ์งํ๋ ํด๋ฒ์ด ํ์ํ๋ค.
- ๊ฐ๋จํ ์ ๋ต์ ์ฝ๊ธฐ ์ค๋ ๋๊ฐ ์์ ๋๊น์ง ๊ฐฑ์ ์ ์ํ๋ ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ๋ฒํผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ํ์ง๋ง ์ฝ๊ธฐ ์ค๋ ๋๊ฐ ๊ณ์ ์ด์ด์ง๋ค๋ฉด ์ฐ๊ธฐ ์ค๋ ๋๋ ๊ธฐ์ ์ํ์ ๋น ์ง๋ค.
- ๋ฐ๋ฉด, ์ฐ๊ธฐ ์ค๋ ๋์๊ฒ ์ฐ์ ๊ถ์ ์ค ์ํ์์ ์ฐ๊ธฐ ์ค๋ ๋๊ฐ ๊ณ์ ์ด์ด์ง๋ค๋ฉด ์ฒ๋ฆฌ์จ์ด ๋จ์ด์ง๋ค.
- ์์ชฝ ๊ท ํ์ ์ก์ผ๋ฉด์ ๋์์ ๊ฐฑ์ ๋ฌธ์ ๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
- ์์ฌํ๋ ์ฒ ํ์๋คDining Philosophers
- ๋ฅ๊ทผ ์ํ์ ์ฒ ํ์๋ค์ด ๋๋ฌ ์๊ณ , ๋ฐฐ๊ฐ ๊ณ ํ๋ฉด ์์์ ํฌํฌ๋ฅผ ์ง์ด ๋ค๊ณ ์คํ๊ฒํฐ๋ฅผ ๋จน์ด์ผ ํ๋ค๋ฉด? ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ ์ฒ ํ์๊ฐ ํฌํฌ๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์คํ๊ฒํฐ๋ฅผ ๋จน์ง ๋ชปํ๋ค.
- ์ฌ๊ธฐ์ ์ฒ ํ์๋ฅผ ์ค๋ ๋๋ก, ํฌํฌ๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ์ด ์๊ฐํด๋ณด๋ฉด?
- ๋ง์ ๊ธฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ฒช๋ ๋ฌธ์ ๋ค.
- ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์์์ ์ป์ผ๋ ค ๊ฒฝ์ํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ ์ค๊ณํ์ง ์์ผ๋ฉด ๋ฐ๋๋ฝ, ๋ผ์ด๋ธ๋ฝ, ์ฒ๋ฆฌ์จ ์ ํ, ํธ์จ์ฑ ์ ํ ๋ฑ์ ๊ฒช๋๋ค.
- ์ผ์์์ ์ ํ๋ ๋๋ค์ ๋ค์ค ์ค๋ ๋ ๋ฌธ์ ๋ (ํํ๊ฐ ์กฐ๊ธ์ฉ ๋ค๋ฅผ์ง๋ผ๋) ์ ์ธ ๋ฒ์ฃผ ์ค ํ๋์ ์ํ๋ค.
- ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ณ ํด๋ฒ์ ์ง์ ๊ตฌํํด๋ณด์. ๊ทธ๋ฌ๋ฉด ๋์ค์ ์ค์ ๋ฌธ์ ์ ๋ถ๋ฅ์ณค์ ๋ ํด๊ฒฐ์ด ์ฌ์์ง ์ ์๋ค!
- ๋๊ธฐํํ๋ ๋ฉ์๋ ์ฌ์ด์ ์กด์ฌํ๋ ์์กด์ฑ์ ์ดํดํ๋ผ
- ๋๊ธฐํํ๋ ๋ฉ์๋ ์ฌ์ด์ ์์กด์ฑ์ด ์กด์ฌํ๋ฉด ๋์์ฑ ์ฝ๋์ ์ฐพ์๋ด๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๊ฐ ์๊ธด๋ค.
- ์๋ฐ ์ธ์ด๋ ๊ฐ๋ณ ๋ฉ์๋๋ฅผ ๋ณดํธํ๋ synchronized๋ผ๋ ๊ฐ๋ ์ ์ง์ํ๋ค.
- ํ์ง๋ง ๊ณต์ ํด๋์ค ํ๋์ ๋๊ธฐํ๋ ๋ฉ์๋๊ฐ ์ฌ๋ฟ์ด๋ผ๋ฉด ๊ตฌํ์ด ์ฌ๋ฐ๋ฅธ์ง ๋ค์ ํ๋ฒ ํ์ธํด๋ณด๋ผ
- ๊ณต์ ๊ฐ์ฒด ํ๋์ ์ฌ๋ฌ ๋ฉ์๋๊ฐ ํ์ํ ์ํฉ์ด ์ค๋ฉด?
- ํด๋ผ์ด์ธํธ์์ ์ ๊ธ ํด๋ผ์ด์ธํธ์์ ์ฒซ ๋ฒ์งธ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์๋ฒ๋ฅผ ์ ๊ทผ๋ค. ๋ง์ง๋ง ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๊น์ง ์ ๊ธ์ ์ ์งํ๋ค.
- ์๋ฒ์์ ์ ๊ธ ์๋ฒ์๋ค "์๋ฒ๋ฅผ ์ ๊ทธ๊ณ ๋ชจ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ํ ์ ๊ธ์ ํด์ ํ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ์ฐ๊ฒฐ(Adapter) ์๋ฒ ์ ๊ธ์ ์ํํ๋ ์ค๊ฐ ๋จ๊ณ๋ฅผ ์์ฑํ๋ค. '์๋ฒ์์ ์ ๊ธ' ๋ฐฉ์๊ณผ ์ ์ฌํ์ง๋ง ์๋ ์๋ฒ๋ ๋ณ๊ฒฝํ์ง ์๋๋ค.
๋๊ธฐํํ๋ ๋ถ๋ถ์ ์๊ฒ ๋ง๋ค์ด๋ผ
- ์๋ฐ์์ synchronized ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฝ์ ์ค์ ํ๋ค. ๊ฐ์ ๋ฝ์ผ๋ก ๊ฐ์ผ ๋ชจ๋ ์ฝ๋ ์์ญ์ ํ ๋ฒ์ ํ ์ค๋ ๋๋ง ์คํ์ด ๊ฐ๋ฅํ๋ค. ๋ฝ์ ์ค๋ ๋๋ฅผ ์ง์ฐ์ํค๊ณ ๋ถํ๋ฅผ ๊ฐ์ค์ํจ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฌ๊ธฐ์ ๊ธฐ์ synchronized ๋ฌธ์ ๋จ๋ฐํ๋ ์ฝ๋๋ ๋ฐ๋์งํ์ง ์๋ค.
- ๋ฐ๋ฉด ์๊ณ์์ญ(critical section)์ ๋ฐ๋์ ๋ณดํธํด์ผ ํ๋ค. ๋ฐ๋ผ์, ์ฝ๋๋ฅผ ์งค ๋๋ ์๊ณ ์์ญ ์๋ฅผ ์ต๋ํ ์ค์ฌ์ผ ํ๋ค.
- ์๊ณ์์ญ์๊ณ ์์ญ ๊ฐ์๋ฅผ ์ค์ธ๋ต์๊ณ ๊ฑฐ๋ํ ์๊ณ ์์ญ ํ๋๋ก ๊ตฌํํ๋ ์์งํ ํ๋ก๊ทธ๋๋จธ๋ ์๋ค.
- ํ์ ์ด์์ผ๋ก ์๊ณ์์ญ ํฌ๊ธฐ๋ฅผ ํค์ฐ๋ฉด ์ค๋ ๋ ๊ฐ์ ๊ฒฝ์์ด ๋์ด๋๊ณ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
๊ถ์ฅ์ฌํญ: ๋๊ธฐํํ๋ ๋ถ๋ถ์ ์ต๋ํ ์๊ฒ ๋ง๋ค์ด๋ผ.
์ฌ๋ฐ๋ฅธ ์ข ๋ฃ ์ฝ๋๋ ๊ตฌํํ๊ธฐ ์ด๋ ต๋ค
- ์๊ตฌ์ ์ผ๋ก ๋์๊ฐ๋ ์์คํ ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ ๋๋ค ๊น๋ํ๊ฒ ์ข ๋ฃํ๋ ์์คํ ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฅด๋ค.
- ๊น๋ํ๊ฒ ์ข
๋ฃํ๋ ์ฝ๋๋ฅผ ์ฌ๋ฐ๋ก ๊ตฌํํ๊ธฐ ์ด๋ ต๋ค. ๊ฐ์ฅ ํํ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ๋๋ฝ์ด๋ค. ์ฆ, ์ค๋ ๋๊ฐ ์ ๋ ์ค์ง ์์ ์๊ทธ๋์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ์) ๋ถ๋ชจ ์ค๋ ๋๊ฐ ์์ ์ค๋ ๋๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ ํ ๋ชจ๋๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์์์ ํด์ ํ๊ณ ์ข
๋ฃํ๋ ์์คํ
- ๋ง์ฝ ์์ ์ค๋ ๋ ์ค ํ๋๊ฐ ๋ฐ๋๋ฝ์ด ๊ฑธ๋ ธ๋ค๋ฉด? ๋ถ๋ชจ ์ค๋ ๋๋ ์์ํ ๊ธฐ๋ค๋ฆฌ๊ณ , ์์คํ ์ ์์ํ ์ข ๋ฃ๋์ง ๋ชปํ๋ค.
- ๋ง์ฝ ์ฌ์ฉ์์๊ฒ์ ์ข ๋ฃํ๋ผ๋ ์ง์๋ฅผ ๋ฐ์๋ค๋ฉด? ๋ถ๋ชจ ์ค๋ ๋๋ ๋ชจ๋ ์์ ์ค๋ ๋์๊ฒ ์์ ์ ๋ฉ์ถ๊ณ ์ข ๋ฃํ๋ผ๋ ์๊ทธ๋์ ์ ๋ฌํ๋ค.
- ๊ทธ๋ฐ๋ฐ ์์ ์ค๋ ๋ ์ค ๋ ๊ฐ๊ฐ ์์ฐ์/์๋น์ ๊ด๊ณ๋ผ๋ฉด? ์์ฐ์ ์ค๋ ๋๋ ์ฌ๋นจ๋ฆฌ ์ข ๋ฃํ๋๋ฐ ์๋น์ ์ค๋ ๋๊ฐ ์์ฐ์ ์ค๋ ๋์์ ์ค๋ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ผ ์์ํ ๊ธฐ๋ค๋ฆด ์ ์๋ค.
- ์) ๋ถ๋ชจ ์ค๋ ๋๊ฐ ์์ ์ค๋ ๋๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ ํ ๋ชจ๋๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์์์ ํด์ ํ๊ณ ์ข
๋ฃํ๋ ์์คํ
- ๊น๋ํ๊ฒ ์ข ๋ฃํ๋ ๋ค์ค ์ค๋ ๋ ์ฝ๋๋ฅผ ์ง์ผ ํ๋ค๋ฉด ์๊ฐ์ ํฌ์ํด ์ฌ๋ฐ๋ก ๊ตฌํํด์ผ ํ๋ค.
๊ถ์ฅ์ฌํญ: ์ข ๋ฃ ์ฝ๋๋ฅผ ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ๊ณ ๋ฏผํ๊ณ ๋์ํ๊ฒ ์ด๊ธฐ๋ถํฐ ๊ตฌํํ๋ผ. ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฐ๋ค. ์๊ฐ๋ณด๋ค ์ด๋ ค์ฐ๋ฏ๋ก ์ด๋ฏธ ๋์จ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒํ ํ๋ผ.
์ค๋ ๋ ์ฝ๋ ํ ์คํธํ๊ธฐ
๐น ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๋ค๊ณ ์ฆ๋ช ํ๊ธฐ๋ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค.
โฝ ํ ์คํธ๊ฐ ์ ํ์ฑ์ ๋ณด์ฅํ์ง๋ ์๋๋ค.
โฝ ๊ทธ๋ผ์๋ ์ถฉ๋ถํ ํ ์คํธ๋ ์ํ์ ๋ฎ์ถ๋ค.
โฝ ์ค๋ ๋๊ฐ ํ๋์ธ ํ๋ก๊ทธ๋จ์ ์ง๊ธ๊น์ง ํ ๋ง์ด ๋ชจ๋ ์ณ๋ค.
โฝ ๊ทธ๋ฐ๋ฐ ๊ฐ์ ์ฝ๋์ ๊ฐ์ ์์์ ์ฌ์ฉํ๋ ์ค๋ ๋๊ฐ ๋ ์ด์์ผ๋ก ๋์ด๋๋ฉด ์ํฉ์ ๊ธ๊ฒฉํ๊ฒ ๋ณต์กํด์ง๋ค.
๊ถ์ฅ์ฌํญ: ๋ฌธ์ ๋ฅผ ๋ ธ์ถํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ผ. ํ๋ก๊ทธ๋จ ์ค์ ๊ณผ ์์คํ ์ค์ ๊ณผ ๋ถํ๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์์ฃผ ๋๋ ค๋ผ. ํ ์คํธ๊ฐ ์คํจํ๋ฉด ์์ธ์ ์ถ์ ํ๋ผ. ๋ค์ ๋๋ ธ๋๋ ํต๊ณผํ๋๋ผ๋ ์ด์ ๋ก ๊ทธ๋ฅ ๋์ด๊ฐ๋ฉด ์ ๋๋ก ์ ๋๋ค.
- ์ค๋ ๋ ํ
์คํธ ์ ๊ณ ๋ คํ ์ฌํญ
- ๋ง์ด ์ ๋๋ ์คํจ๋ ์ ์ ์ ์ธ ์ค๋ ๋ ๋ฌธ์ ๋ก ์ทจ๊ธํ๋ผ
- ๋ค์ค ์ค๋ ๋ ์ฝ๋๋ ๋๋๋ก '๋ง์ด ์ ๋๋' ์ค๋ฅ๋ฅผ ์ผ์ผํจ๋ค.
- ๋๋ค์ ๊ฐ๋ฐ์๋ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ฝ๋์ ๊ต๋ฅํ๋ ๋ฐฉ์์ ์ง๊ด์ ์ผ๋ก ์ดํดํ์ง ๋ชปํ๋ค.
- ์ค๋ ๋ ์ฝ๋์ ์ ์ ํ ๋ฒ๊ทธ๋ ์์ฒ, ์๋ฐฑ๋ง ๋ฒ์ ํ ๋ฒ์ฉ ๋๋ฌ๋๊ธฐ๋ ํ๋ค. (์คํจ๋ฅผ ์ฌํํ๊ธฐ ์์ฃผ ์ด๋ ต๋ค)
- ๊ทธ๋์ ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ฐ์ฃผ์ (cosmic-ray), ํ๋์จ์ด ๋ฌธ์ , ๋จ์ํ '์ผํ์ฑ' ๋ฌธ์ ๋ก ์น๋ถํ๊ณ ๋ฌด์ํ๋ค. ์ผํ์ฑ ๋ฌธ์ ๋ ์กด์ฌํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ ํธ์ด ์์ ํ๋ค.
- ๋ค์ค ์ค๋ ๋๋ฅผ ๊ณ ๋ คํ์ง ์์ ์์ฐจ ์ฝ๋๋ถํฐ ์ ๋๋ก ๋๊ฒ ๋ง๋ค์
- ์ค๋ ๋ ํ๊ฒฝ ๋ฐ์์ ์ฝ๋๊ฐ ์ ๋๋ก ๋๋์ง ๋ฐ๋์ ํ์ธํ๋ค.
- ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ์ค๋ ๋๊ฐ ํธ์ถํ๋ POJO๋ฅผ ๋ง๋ ๋ค. POJO๋ ์ค๋ ๋๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ํ๊ฒฝ ๋ฐ์์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ค๋ ๋ ํ๊ฒฝ ๋ฐ์์ ์ฝ๋๊ฐ ์ ๋๋ก ๋๋์ง ๋ฐ๋์ ํ์ธํ๋ค.
- ๋ค์ค ์ค๋ ๋๋ฅผ ์ฐ๋ ์ฝ๋ ๋ถ๋ถ์ ๋ค์ํ ํ๊ฒฝ์ ์ฝ๊ฒ ๋ผ์ ๋ฃ์ ์ ์๊ฒ ์ค๋ ๋ ์ฝ๋๋ฅผ ๊ตฌํํ๋ผ
- ๋ค์ค ์ค๋ ๋๋ฅผ ์ฐ๋ ์ฝ๋๋ฅผ ๋ค์ํ ์ค์ ์ผ๋ก ์คํํ๊ธฐ ์ฝ๊ฒ ๊ตฌํํ๋ผ.
- ํ ์ค๋ ๋๋ก ์คํํ๊ฑฐ๋, ์ฌ๋ฌ ์ค๋ ๋๋ก ์คํํ๊ฑฐ๋, ์คํ ์ค ์ค๋ ๋๋ฅผ ๋ฐ๊ฟ๋ณธ๋ค.
- ์ค๋ ๋ ์ฝ๋๋ฅผ ์ค์ ํ๊ฒฝ์ด๋ ํ ์คํธ ํ๊ฒฝ์์ ๋๋ ค๋ณธ๋ค
- ํ ์คํธ ์ฝ๋๋ฅผ ๋นจ๋ฆฌ, ์ฒ์ฒํ, ๋ค์ํ ์๋๋ก ๋๋ ค๋ณธ๋ค
- ๋ฐ๋ณต ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค.
- ๋ค์ค ์ค๋ ๋๋ฅผ ์ฐ๋ ์ฝ๋๋ฅผ ๋ค์ํ ์ค์ ์ผ๋ก ์คํํ๊ธฐ ์ฝ๊ฒ ๊ตฌํํ๋ผ.
- ๋ค์ค ์ค๋ ๋๋ฅผ ์ฐ๋ ์ฝ๋ ๋ถ๋ถ์ ์ํฉ์ ๋ง๊ฒ ์กฐ์จํ ์ ์๊ฒ ์์ฑํ๋ผ
- ์ ์ ํ ์ค๋ ๋ ๊ฐ์๋ฅผ ํ์ ํ๋ ค๋ฉด ์๋นํ ์ํ์ฐฉ์ค๊ฐ ํ์ํ๋ค.
- ์ฒ์๋ถํฐ ๋ค์ํ ์ค์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ ์ธก์ ๋ฐฉ๋ฒ์ ๊ฐ๊ตฌํ๋ค.
- ์ค๋ ๋ ๊ฐ์๋ฅผ ์กฐ์จํ๊ธฐ ์ฝ๊ฒ ์ฝ๋๋ฅผ ๊ตฌํํ๋ค.
- ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๋ ๋์ค์ ์ค๋ ๋ ๊ฐ์๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ๋ ๊ณ ๋ คํ๋ค.
- ํ๋ก๊ทธ๋จ ์ฒ๋ฆฌ์จ๊ณผ ํจ์จ์ ๋ฐ๋ผ ์ค์ค๋ก ์ค๋ ๋ ๊ฐ์๋ฅผ ์กฐ์จํ๋ ์ฝ๋๋ ๊ณ ๋ฏผํ๋ค.
- ํ๋ก์ธ์ ์๋ณด๋ค ๋ง์ ์ค๋ ๋๋ฅผ ๋๋ ค๋ณด๋ผ
- ์์คํ ์์ ์ค๋ ๋๋ฅผ ์ค์ํ(swapping)ํ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ์ค์ํ์ ์ผ์ผํค๋ ค๋ฉด ํ๋ก์ธ์ ์๋ณด๋ค ๋ง์ ์ค๋ ๋๋ฅผ ๋๋ฆฐ๋ค.
- ์ค์ํ์ด ์ฆ์์๋ก ์๊ณ ์์ญ์ ๋นผ๋จน์ ์ฝ๋๋ ๋ฐ๋๋ฝ์ ์ผ์ผํค๋ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ฌ์์ง๋ค.
- ๋ค๋ฅธ ํ๋ซํผ์์ ๋๋ ค๋ณด๋ผ
- ์ด์์ฒด์ ๋ง๋ค ์ค๋ ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์ ์ฑ ์ด ๋ฌ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
- ๋ค์ค ์ค๋ ๋ ์ฝ๋๋ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์๊ฐ๋ค.
- ๋ฐ๋ผ์ ์ฝ๋๊ฐ ๋์๊ฐ ๊ฐ๋ฅ์ฑ์ด ์๋ ํ๋ซํผ ์ ๋ถ์์ ํ ์คํธ๋ฅผ ์ํํด์ผ ๋ง๋ ํ๋ค.
- ์ฝ๋์ ๋ณด์กฐ ์ฝ๋instrument๋ฅผ ๋ฃ์ด ๋๋ ค๋ผ. ๊ฐ์ ๋ก ์คํจ๋ฅผ ์ผ์ผํค๊ฒ ํด๋ณด๋ผ
- ํํ ์ค๋ ๋ ์ฝ๋๋ ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ฝ์ง ์๋ค.
- ์ค๋ ๋ ๋ฒ๊ทธ๊ฐ ์ฐ๋ฐ์ ์ด๊ณ ์ฐ๋ฐ์ ์ด๊ณ ์ฌํ์ด ์ด๋ ค์ด ์ด์ ๋ ์ฝ๋๊ฐ ์คํ๋๋ ์์ฒ ๊ฐ์ง ๊ฒฝ๋ก ์ค์ ์์ฃผ ์์๋ง ์คํจํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฆ, ์คํจํ๋ ๊ฒฝ๋ก๊ฐ ์คํ๋ ํ๋ฅ ์ ๊ทน๋๋ก ์ ์กฐํ๋ค. ๊ทธ๋์ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ฐพ์๋ด๊ธฐ๊ฐ ์์ฃผ ์ด๋ ต๋ค.
- ์ด๋ ๊ฒ ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ข ๋ ์์ฃผ ์ผ์ผํฌ ๋ฐฉ๋ฒ์ ์์๊น? => ๋ณด์กฐ ์ฝ๋๋ฅผ ์ถ๊ฐํด ์ฝ๋๊ฐ ์คํ๋๋ ์์๋ฅผ ๋ฐ๊ฟ์ค๋ค!
- ์๋ฅผ ๋ค์ด, Object.wait(), Object.sleep(), Object.yield(), Object.priority() ๋ฑ๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด ์ฝ๋๋ฅผ ๋ค์ํ ์์๋ก ์คํํ๋ค.
- ๊ฐ ๋ฉ์๋๋ ์ค๋ ๋๊ฐ ์คํ๋๋ ์์์ ์ํฅ์ ๋ฏธ์น๋ค. ๋ฐ๋ผ์ ๋ฒ๊ทธ๊ฐ ๋๋ฌ๋ ๊ฐ๋ฅ์ฑ๋ ๋์์ง๋ค.
- ์๋ชป๋ ์ฝ๋๋ผ๋ฉด ์ด๋ฐ์ ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฅํ ์์ฃผ ์คํจํ๋ ํธ์ด ์ข๋ค.
- ๋ง์ด ์ ๋๋ ์คํจ๋ ์ ์ ์ ์ธ ์ค๋ ๋ ๋ฌธ์ ๋ก ์ทจ๊ธํ๋ผ
- ์ฝ๋์ ๋ณด์กฐ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง
- ์ง์ ๊ตฌํํ๊ธฐ
- ์ฝ๋์๋ค ์ง์ wait(), sleep(), yield(), priority() ํจ์๋ฅผ ์ถ๊ฐํ๋ค. ํน๋ณํ ๊น๋ค๋ก์ด ์ฝ๋๋ฅผ ํ ์คํธํ ๋ ์ ํฉํ๋ค.
yield()๋ฅผ ์ฝ์ ํ๋ฉด ์ฝ๋๊ฐ ์คํ๋๋ ๊ฒฝ๋ก๊ฐ ๋ฐ๋๋ค. ๊ทธ๋์ ์ด์ ์ ์คํจํ์ง ์์๋ ์ฝ๋๊ฐ ์คํจํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋ค. ์ฝ๋๊ฐ ์คํจํ๋ค๋ฉด yield()๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ์๋๋ค. ์๋ ์๋ชป๋ ์ฝ๋์ธ๋ฐ ์ฆ๊ฑฐ๊ฐ ๋๋ฌ๋ฌ์ ๋ฟ์ด๋ค.public synchronized String nextIUrlOrNull() { if (hasNext()) { String url = urlGenerator.next(); Thread.yield(); // ํ ์คํธ๋ฅผ ์ํด ์ถ๊ฐ๋์๋ค. updateHasNext(); return url; } return url; }
- ๋ณด์กฐ ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์ ์์น๋ฅผ ์ง์ ์ฐพ์์ผ ํ๋ค.
- ์ด๋ค ํจ์๋ฅผ ์ด๋์ ํธ์ถํด์ผ ์ ๋นํ์ง ์ด๋ป๊ฒ ์๊น?
- ๋ฐฐํฌ ํ๊ฒฝ์ ๋ณด์กฐ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋จ๊ฒจ๋๋ฉด ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
- ๋ฌด์์์ ์ด๋ค. ์ค๋ฅ๊ฐ ๋๋ฌ๋ ์ง๋ ๋ชจ๋ฅด๊ณ ๋๋ฌ๋์ง ์์์ง๋ ๋ชจ๋ฅธ๋ค. ์ฌ์ค์ ๋๋ฌ๋์ง ์์ ํ๋ฅ ์ด ๋ ๋๋ค.
- ์ง์ ๊ตฌํํ๊ธฐ
์๋ํ
๋ณด์กฐ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๋ ค๋ฉด AOF(Aspect-Oriented Framework), CGLIB, ASM ๋ฑ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ๋ค์์ ๋ฉ์๋๊ฐ ํ๋์ธ ํด๋์ค๋ค.
public class ThreadJigglePoint() {
public static void jiggle(){
}
}
์ฌ๊ธฐ์ ๋ค์ํ ์์น์ Thread.JigglePoint.jiggle() ํธ์ถ์ ์ถ๊ฐํ๋ค.
public synchronized String nextUrlOrNull() {
if (hasNext()) {
ThreadJigglePoint.jiggle();
String url = urlGenerator.next();
ThreadJigglePoint.jiggle();
updateHasNext();
ThreadJigglePoint.jiggle();
return url;
}
return null;
}
ThreadJigglePoint.jiggle() ํธ์ถ์ ๋ฌด์์๋ก sleep์ด๋ yield๋ฅผ ํธ์ถํ๋ค. ๋๋ก๋ ์๋ฌด ๋์๋ ํ์ง ์๋๋ค.ThreadJigglePoint ํด๋์ค๋ฅผ ๋ ๊ฐ์ง๋ก ๊ตฌํํ๋ฉด ํธ๋ฆฌํ๋ค. ํ๋๋ jiggle() ๋ฉ์๋๋ฅผ ๋น์๋๊ณ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ค. ๋ค๋ฅธ ํ๋๋ ๋ฌด์์๋ก nop, sleep์ด๋ yield ๋ฑ์ ํ ์คํธ ํ๊ฒฝ์์ ์ํํ๋ค. ๋์งธ ๊ตฌํ์ผ๋ก ํ ์คํธ๋ฅผ ์์ฒ๋ฒ ์คํํ๋ฉด ์ค๋ ๋ ์ค๋ฅ๊ฐ ๋๋ฌ๋ ์ง ๋ชจ๋ฅธ๋ค. ์ฝ๋๊ฐ ์์ฒ๋ฒ์ ์ด๋ฅด๋ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ค๋ฉด ๋๋ฆ๋๋ก ํ ๋งํผ ํ๋ค๊ณ ๋งํด๋ ๋๊ฒ ๋ค. ์ฝ๋๋ฅผ ํ๋๋(jiggle) ์ด์ ๋ ์ค๋ ๋๋ฅผ ๋งค๋ฒ ๋ค๋ฅธ ์์๋ก ์คํํ๊ธฐ ์ํด์๋ค. ์ข์ ํ ์คํธ ์ผ์ด์ค์ ํ๋ค๊ธฐ(jiggling) ๊ธฐ๋ฒ์ ์ค๋ฅ๊ฐ ๋๋ฌ๋ ํ๋ฅ ์ ํฌ๊ฒ ๋์ฌ์ค๋ค.
๊ถ์ฅ์ฌํญ : ํ๋ค๊ธฐ ๊ธฐ๋ฒ(jiggling)์ ์ฌ์ฉํด ์ค๋ฅ๋ฅผ ์ฐพ์๋ด๋ผ
๊ฒฐ๋ก
- (1) SRP๋ฅผ ์ค์ํ๋ค.
- POJO๋ฅผ ์ฌ์ฉํด ์ค๋ ๋๋ฅผ ์๋ ์ฝ๋์ ๋ชจ๋ฅด๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ค.
- ์ค๋ ๋ ์ฝ๋๋ฅผ ํ ์คํธํ ๋๋ ์ ์ ์ผ๋ก ์ค๋ ๋๋ง ํ ์คํธํ๋ค.
- ์ค๋ ๋ ์ฝ๋๋ ์ต๋ํ ์ง์ฝ๋๊ณ ์์์ผ ํ๋ค.
- (2) ๋์์ฑ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ์ ์ ์ ์ธ ์์ธ์ ์ฒ ์ ํ ์ดํดํ๋ค.
- ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ์๋ฃ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ์์ ํ์ ๊ณต์ ํ ๋ ๋์์ฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
- ๋ฃจํ ๋ฐ๋ณต์ ๋๋ด๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ ๊น๋ํ๊ฒ ์ข ๋ฃํ๋ ๋ฑ ๊ฒฝ๊ณ ์กฐ๊ฑด์ ๊ฒฝ์ฐ๊ฐ ๊น๋ค๋ก์ฐ๋ฏ๋ก ํน๋ณํ ์ฃผ์ํ๋ค.
- (3) ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋ค.
- ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ์ด ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ํ์ ํ๋ค.
- (4) ๋ณดํธํ ์ฝ๋ ์์ญ์ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ๊ณผ ํน์ ์ฝ๋ ์์ญ์ ์ ๊ทธ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ค.
- ์ ๊ธ ํ์๊ฐ ์๋ ์ฝ๋๋ ์ ๊ทธ์ง ์๋๋ค.
- ์ ๊ธด ์์ญ์์ ๋ค๋ฅธ ์ ๊ธด ์์ญ์ ํธ์ถํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ค๋ฉด ๊ณต์ ํ๋ ์ ๋ณด์ ๊ณต์ ํ์ง ์๋ ์ ๋ณด๋ฅผ ์ ๋๋ก ์ดํดํด์ผ ํ๋ค.
- (5) ๊ณต์ ํ๋ ๊ฐ์ฒด ์์ ๋ฒ์๋ฅผ ์ต๋ํ ์ค์ธ๋ค.
- ํด๋ผ์ด์ธํธ์๊ฒ ๊ณต์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ฑ ์์ ๋ ๋๊ธฐ์ง ์๋๋ค.
- (6) ์ค๋ ๋์ ์ผํ์ฑ ๋ฌธ์ ๋ ๋๊ฐ ์์คํ
์ ๋ถํ๊ฐ ๊ฑธ๋ฆด ๋๋ ์๋๋ฉด ๋ฌ๊ธ์์ด ๋ฐ์ํ๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์ค๋ ๋ ์ฝ๋๋ ๋ง์ ํ๋ซํผ์์ ๋ง์ ์ค์ ์ผ๋ก ๋ฐ๋ณตํด์ ๊ณ์ ํ ์คํธํด์ผ ํ๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ์ TDD 3๋ ๊ท์น์ ๋ฐ๋ฅด๋ฉด ์์ฐํ ์ป์ด์ง๋ค.
- ์๊ฐ์ ๋ค์ฌ ๋ณด์กฐ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ฌ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๊ฒ ๋์์ง๋ค.
- ์ง์ ๊ตฌํํด๋ ๊ด์ฐฎ๊ณ ๋ช ๊ฐ์ง ์๋ํ ๊ธฐ์ ์ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค. ์ด๋ฐ๋ถํฐ ๋ณด์กฐ ์ฝ๋๋ฅผ ๊ณ ๋ คํ์.
- ์ค๋ ๋ ์ฝ๋๋ ์ถ์ํ๊ธฐ ์ ๊น์ง ์ต๋ํ ์ค๋ซ๋์ ๋๋ ค๋ด์ผ ํ๋ค.
์ฐธ๊ณ ๋งํฌ
'Java > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CleanCode] 15์ฅ JUnit ๋ค์ฌ๋ค๋ณด๊ธฐ (0) | 2023.02.25 |
---|---|
[CleanCode] 14์ฅ ์ ์ง์ ์ธ ๊ฐ์ (0) | 2023.02.25 |
[CleanCode] 12์ฅ ์ฐฝ๋ฐ์ฑ(ๅต็ผๆง) (0) | 2023.02.25 |
[CleanCode] 11์ฅ ์์คํ (0) | 2023.02.25 |
[CleanCode] 10์ฅ ํด๋์ค (0) | 2023.02.25 |