๋ง์ดํฌ๋ก์ํํธ ์๋์ด ๊ฐ๋ฐ์, ๋ฐฑ๊ธฐ์ ์
๊น์ด๊ฐ ๋จ๋ค๋ฅธ ์ดํํฐ๋ธ ์๋ฐ ๐ข
์๋ฐ ๊ณต๋ถ์ ๋, ์ดํํฐ๋ธ ์๋ฐ.
Effective Java?
๋ชจ๋ ์๋ฐ ๊ฐ๋ฐ์๊ฐ ํ๋ฒ์ฏค ๊ณต๋ถ๋ฅผ ์๋ํ์ง๋ง
๊ฒฐ์ฝ ์๋ฌด๋ ์ ๋ณตํ ์ ์๋ ์ฑ
, "์ดํํฐ๋ธ ์๋ฐ"
์ด ๊ฐ์๊ฐ ์๋ฒฝํ๊ฒ ๊ณต๋ตํด ๋๋ฆฝ๋๋ค.
์์ค ๋์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ
๋๊ณ ์ถ์ ๋น์ ์ ์ํด.
ใ์ดํํฐ๋ธ ์๋ฐ(Efftective Java 3/E)ใ๋ ๋ชจ๋ ์๋ฐ ๊ฐ๋ฐ์์๊ฒ ๊ถํ๋ ์ฑ
์ด์ง๋ง ์ญ์ค์ ์ด๊ฒ๋ ๋ชจ๋ ์๋ฐ ๊ฐ๋ฐ์๊ฐ ์ฝ๊ฒ ํ์ตํ ์ ์๋ ์ฑ
์ ์๋๋๋ค. ์ ์ผ ์ฒซ ๋ฒ์งธ ์์ดํ
๋ถํฐ ์ ๋๋ก ์ํํ๋ ค๋ฉด "์ด๊ฑฐ ํ์
", "ํ๋ผ์ด์จ์ดํธ ํจํด", "์ธํฐํ์ด์ค์ ์ ์ ๋ฉ์๋", "์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ", "๋ฆฌํ๋ ์
" ์ด๋ผ๋ ๋ฐฐ๊ฒฝ ์ง์์ด ํ์ํฉ๋๋ค. ์ด๋ฐ ๋ฐฐ๊ฒฝ ์ง์ ์์ด ์ฑ
์ ๋ด์ฉ์ 100% ์ดํดํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ๋งํผ ํ์ตํ๊ธฐ ์ด๋ ค์ด ์ฑ
์ด์ง๋ง, ํ๋์ฉ ํ์ต์ ํ์๋ ๋ค๋ฐ๋ฅด๋ ๋ณด์๋ ๋จ๋ค๋ฆ
๋๋ค.
ใ์ดํํฐ๋ธ ์๋ฐใ์ ๋ด์ฉ์ ์ดํดํ๋ฉด ์ฌ๋ฌ๋ถ์ ์ค๋ ฅ๊ณผ ์ง์์ ์ด์ ์ ๋นํด ๋ง์ด ํฅ์๋ ๊ฒ์ด๋ฉฐ, ์๋ก์ด ์์ผ๋ฅผ ๋ฐํ์ค ๊ฒ์
๋๋ค. ์ฌ์ง์ด ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ณต๋ถํ๊ฑฐ๋ ์ฌ์ฉํ๋ค ํ๋๋ผ๋ ๋ง์ด์ฃ . (๋ง์น ์ด ์ฑ
์ ์ด์ฌํ ๊ณต๋ถํ์์ง๋ง ์ง๊ธ์ ๋ง์ดํฌ๋ก์ํํธ์์ C#๊ณผ Powershell์ ์ฌ์ฉํ๋ฉฐ ์ผํ๊ณ ์๋ ์ง๊ธ์ ์ ์ฒ๋ผ ๋ง์ด์ฃ .)
์๋ฆฌ์ฆ๋ก ๋์ ํ๋
์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ต
์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ต - Part 2์๋ฆฌ์ฆ ์ฐ์ฌ ์ค
ใ์ดํํฐ๋ธ ์๋ฐใ๋ฅผ ์ด 5๋ถ๋ก ๋๋ ์ ํ์ตํฉ๋๋ค. 2๋ถ์ ํด๋นํ๋ ์ด ๊ฐ์๋ ใ์ดํํฐ๋ธ ์๋ฐใ 4์ฅ "ํด๋์ค์ ์ธํฐํ์ด์ค"์, 5์ฅ "์ ๋ค๋ฆญ"์ ๋ค๋ฃน๋๋ค.
ใ์ดํํฐ๋ธ ์๋ฐใ ํ์ต์ ์ด๋ ค์ํ๋ ๊ฐ๋ฐ์ ๋๋ ํ์ ๋๋ ๋ณด๋ค ์๋ฒฝํ๊ฒ ํ์ตํ๊ณ ์ถ์ ๋ถ๋ค์ ์ํด ๊ฐ ์์ดํ
์ ์ฝ๋์ ํจ๊ป ์์ฝํ๊ณ , ๊ฐ ์์ดํ
๋ณ๋ก ํ์ตํ๋ ๋ฐ ๋์์ด ๋๋ ๋ฐฐ๊ฒฝ ์ง์์ ์ ๋ฌํด ๋๋ฆฝ๋๋ค. ์ฌ๋ฌ๋ถ์ ใ์ดํํฐ๋ธ ์๋ฐใ ํ์ต์ด ํจ์ฌ ์ฌ๋ฏธ์๊ณ , ์ฝ๊ณ ๋ ์ ์ตํ ๊ฒ์
๋๋ค.
์๋ฐ ์ฌํ ํ์ต์ด ํ์ํ ๋ถ๋ค๊ป.
์ด ๊ฐ์๋ ํ๋ก๊ทธ๋๋ฐ ์ด๊ธ์ ๋๋ ์
๋ฌธ์๋ฅผ ์ํ ๊ฐ์๊ฐ ์๋๋๋ค. ์๋ฐ๋ฅผ ์ฌ์ฉํด ์ผ์ ํ๊ณ ์๋ ๊ฐ๋ฐ์ ๋๋ ๊ธฐ๋ณธ์ ์ธ ์๋ฐ ๊ณต๋ถ๋ฅผ ๋ง์น๊ณ ๋ณด๋ค ์์ค๋์ ์ฌํ ํ์ต์ ํตํด ์ค๋ ฅ์ ์ฌ๋ฆฌ๊ณ ์ถ์ ๊ฐ๋ฐ์ ๋๋ ํ์์ ์ํ ๊ฐ์์
๋๋ค. ๋ค์ ๊ฐ์๋ฅผ ์๊ฐํ๊ฑฐ๋ ๊ทธ์ ์คํ๋ ํ์ต์ ํ๋ค๋ฉด ์ด๋ฒ ๊ฐ์๋ฅผ ๋ค์ด๋ ์ข์ต๋๋ค. (์์ธํ ๋ด์ฉ์ ์น์
0 - ๊ฐ์ ์๊ฐ ์์
์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.)
ํ์ ํ์ต ๊ณผ์
๊ถ์ฅ ํ์ต ๊ณผ์
๊ฐ์์์ ์ ์ํ๋
4-Step ํ์ต ์์
์ด ๊ฐ์๋ ์ดํํฐ๋ธ ์๋ฐ 2๋ถ๊ณผ 3๋ถ์์ ๋ค๋ฃจ๋ ์ด 14๊ฐ์ ์์ดํ
์ ๋ค๋ฃจ๋ฉฐ, ์๋ฒฝํ ๊ณต๋ต์ ์ํด ์ด 30๊ฐ์ ๋ฌํ๋ ๋ฐฐ๊ฒฝ ์ง์์ ์ ๋ฌํฉ๋๋ค. ๋ํ ์ดํํฐ๋ธ ์๋ฐ๊ฐ ์ฑ
์์ ๊ธ๋ก๋ง ์ค๋ช
ํ ๋ถ๋ถ๋ ์ฌ๋ฌ๋ถ์ด ๋ณด๋ค ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ถ๊ฐ์ ์ธ ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ๊ถ์ฅํ๋ ํ์ต ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Step 1
"์ดํํฐ๋ธ ์๋ฐ"๋ฅผ ๊ต์ฌ ์ผ์ ๊ตฌ๋งคํ๊ณ , ์์ดํ
์ ํ๋ ๋จผ์ ์ฝ์ต๋๋ค.
Step 2
"์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ต 1๋ถ"์ ํด๋นํ๋ ์์ดํ
์ "ํต์ฌ ์ ๋ฆฌ" ์์
์ ์๊ฐํฉ๋๋ค.
Step 3
์ด์ด์ง๋ "์๋ฒฝ ๊ณต๋ต" ์์
์ ์๊ฐํ๊ณ ๋ถ์กฑํ ๋ถ๋ถ์ ๋ณด์ถฉ ํ์ต์ ์ด์ด๊ฐ๋๋ค.
Step 4
์ถ๊ฐ๋ก ํ์ตํ ๋ถ๋ถ์ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ์๊ณ "์ง๋ฌธ ๋ต๋ณ" ๊ฒ์ํ์ ๋งํฌ๋ฅผ ๋จ๊ฒจ๋์๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ํด๋๋ฆฝ๋๋ค.
14๊ฐ ์์ดํ
๋ณ ์๋ฒฝ ๊ณต๋ต,
ํ์ต ์ปค๋ฆฌํ๋ผ ๐
์์ดํ
15. ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ถํ์ ์ต์ํํ๋ผ.
- ์ ๋ณด ์๋
- ์ ๊ทผ ์ ํ์ ์ฌ์ฉ ์์น
- ์๋ฐ ํ๋ซํผ ๋ชจ๋ ์์คํ
์์ดํ
16. public ํด๋์ค์์๋ public ํ๋๊ฐ ์๋ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ผ.
- ๋ด๋ถ๋ฅผ ๊ณต๊ฐํ Dimension ํด๋์ค์ ์ฑ๋ฅ ์ด์
์์ดํ
17. ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์ต์ํํ๋ผ.
- ๋ถ๋ณ ํด๋์ค
- ๋ถ๋ณ ํด๋์ค์ ์ฅ์ ๊ณผ ๋จ์
- final๊ณผ ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ
- java.util.concurrent ํจํค์ง
- CountDownLatch
์์ดํ
18. ์์๋ณด๋ค๋ ์ปดํฌ์ง์
์ ์ฌ์ฉํ๋ผ.
- ์์์ ๋จ์
- ์ปดํฌ์ง์
์ ์ฅ์
- ๋ฐ์ฝ๋ ์ดํฐ ํจํด
- ์ฝ๋ฐฑ ํ๋ ์์ํฌ์ ์
ํ ๋ฌธ์
์์ดํ
19-20. ์์์ ๊ณ ๋ คํด ์ค๊ณํ๊ณ ๋ฌธ์ํํ๋ผ. ๊ทธ๋ฌ์ง ์์๋ค๋ฉด ์์์ ๊ธ์งํ๋ผ.
- @implSpec
- ์ธํฐํ์ด์ค์ ์ฅ์
- ์ธํฐํ์ด์ค์ ์ถ์ ๊ณจ๊ฒฉ(skeletal) ํด๋์ค
- ํ
ํ๋ฆฟ ๋ฉ์๋ ํจํด
- ๋ํดํธ ๋ฉ์๋์ Object ๋ฉ์๋
์์ดํ
21. ์ธํฐํ์ด์ค๋ ๊ตฌํํ๋ ์ชฝ์ ์๊ฐํด ์ค๊ณํ๋ผ.
- ๋ํดํธ ๋ฉ์๋ ์ถ๊ฐ์ ์ฃผ์ํ ์
- ConcurrentModificationException
์์ดํ
22. ์ธํฐํ์ด์ค๋ ํ์
์ ์ ์ํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ผ.
- ์์๋ฅผ ์ ์ํ๋ ์ฉ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ๋ง ๊ฒ!
- ์์๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ
์์ดํ
23. ํ๊ทธ ๋ฌ๋ฆฐ ํด๋์ค๋ณด๋ค๋ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ผ.
- ํ๊ทธ ๋ฌ๋ฆฐ ํด๋์ค์ ๋จ์
- ๊ณ์ธต ๊ตฌ์กฐ ํ์ฉํ๊ธฐ
์์ดํ
24. ๋ฉค๋ฒ ํด๋์ค๋ ๋๋๋ก static์ผ๋ก ๋ง๋ค๋ผ.
- ์ ์ ๋ฉค๋ฒ ํด๋์ค
- ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค
- ์ต๋ช
ํด๋์ค
- ์ง์ญ ํด๋์ค
- ์ด๋ํฐ ํจํด
์์ดํ
25. ํฑ ๋ ๋ฒจ ํด๋์ค๋ ํ ํ์ผ์ ํ๋๋ง ๋ด์ผ๋ผ.
์์ดํ
26. ๋ก ํ์
์ ์ฌ์ฉํ์ง ๋ง๋ผ.
- ์ ๋ค๋ฆญ ์ฉ์ด ์ ๋ฆฌ
- ๋งค๊ฐ๋ณ์ํ ํ์
์ ์ฌ์ฉํด์ผ ํ๋ ์ด์
- GenericRepository
์์ดํ
27. ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๋ผ.
- ๋น๊ฒ์ฌ(unchecked) ๊ฒฝ๊ณ
- @SuppressWarning
- ์ ๋ํ
์ด์
์์ดํ
28. ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ๋ผ.
- ๊ณต๋ณ vs ๋ถ๊ณต๋ณ
- @SafeVarangs
์์ดํ
29. ์ด์์ด๋ฉด ์ ๋ค๋ฆญ ํ์
์ผ๋ก ๋ง๋ค๋ผ.
- ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ ๋ค๋ฆญ์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ
- ํ์ ์ ํ์
๋งค๊ฐ๋ณ์
์์ดํ
30. ์ด์์ด๋ฉด ์ ๋ค๋ฆญ ๋ฉ์๋๋ก ๋ง๋ค๋ผ.
- ์ ๋๋ฆญ ์ฑ๊ธํด ํฉํฐ๋ฆฌ
- ์ฌ๊ท์ ํ์
ํ์
์์ดํ
31. ํ์ ์ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํด API ์ ์ฐ์ฑ์ ๋์ด๋ผ.
- PECS(Producer-Extends, Consumer-Super)
- ์์ผ๋์นด๋
- ํ์
์ถ๋ก
์์ดํ
32. ์ ๋ค๋ฆญ๊ณผ ๊ฐ๋ณ์ธ์๋ฅผ ํจ๊ป ์ธ ๋๋ ์ ์คํ๋ผ.
- ์ ๋ค๋ฆญ ๊ฐ๋ณ์ธ์
- ThreadLocal
- ThreadLocalRandom
์์ดํ
33. ํ์
์์ ์ด์ข
์ปจํ
์ด๋๋ฅผ ๊ณ ๋ คํ๋ผ.
- ํ์
์์ ์ด์ข
์ปจํ
์ด๋
- ํ์
ํ ํฐ
- ์ํผ ํ์
ํ ํฐ
- ํ์ ์ ํ์
ํ ํฐ
๋ชจ๋ ์๋ฐ ๊ฐ๋ฐ์์ ํ๋
์,
ํจ๊ป ์ฝ์ด๋๊ฐ ์ ์๋๋ก ๐
์ดํํฐ๋ธ ์๋ฐ๋ฅผ ๋ณด๋ค ์ฝ๊ณ ์๋ฒฝํ๊ฒ ๊ณต๋ถํ ์ ์๋ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ดํํฐ๋ธ ์๋ฐ์์ ์๊ฐํ๋ ํต์ฌ์ ์ธ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ๋ณด๋ค ์๋ฒฝํ๊ฒ ์ดํดํ๋ ๋ฐ ํ์ํ ๋ฐฐ๊ฒฝ ์ง์์ ์์ธํ ์ ๋ฌํ๊ณ ์์ต๋๋ค.
์ด 5๋ถ์ ๊ฑธ์ณ์ ์งํํ๋ โ์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ตโ ์๋ฆฌ์ฆ์ ์ด๋ฒ ๊ฐ์๋ ์๋ฆฌ์ฆ ์ค ๋ ๋ฒ์งธ ๊ฐ์์
๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฐ์๋ฅผ ๋จผ์ ์๊ฐํ ๋ค์ ์ด์ด์ ํ์ตํด ์ฃผ์ธ์.
๋ฐฑ๊ธฐ์ ์ โ์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ตโ ์ง๋ ๊ฐ์ ๐