Java/๐ Effective Java
18. ์์๋ณด๋ค๋ ์ปดํฌ์ง์
์ฌ์ฉ๋ค๋ฅธ ํจํค์ง์ ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์์ํ๋ ์ผ์ ์ํ ๋ฉ์๋ ํธ์ถ๊ณผ ๋ฌ๋ฆฌ ์์์ ์บก์ํ๋ฅผ ๊นจ๋จ๋ฆผ ๐ ์์ ํด๋์ค๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋๋๋์ ๋ฐ๋ผ ํ์ ํด๋์ค์ ๋์์ ์ด์ ์๊ธธ ์ ์์์์ ํด๋์ค๋ ๋ฆด๋ฆฌ์ฆ๋ง๋ค ๋ด๋ถ ๊ตฌํ์ด ๋ฌ๋ผ์ง ์ ์๋๋ฐ, ๊ทธ๋ก ์ธํด ํ์ ํด๋์ค๊ฐ ์ค๋์ํ ์ ์์ โณ๏ธ ์์์ ์๋ชป ์ฌ์ฉํ ์ public class InstrumentedHashSet extends HashSet { private int addCount = 0; public InstrumentedHashSet(){ } public InstrumentedHashSet(int initCap, float loadFactor){ super(i..
Java
ํ๋ก์ธ์ค์ ์ค๋ ๋โณ๏ธ ํ๋ก์ธ์ค์ด์์ฒด์ ์์์ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค๊ฐ ํ๋ก์ธ์ค๋ ๋
๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๊ณ ์์ ๐ ํ๋ก์ธ์ค๊ฐ ์๋ก์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผ X์ด์์ฒด์ ์์ ๋ณ๋์ ์์
๋จ์๋ก ๋ถ๋ฆฌํด์ ๊ด๋ฆฌ๋จ ํ๋ก์ธ์ค๋ ํ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๋ฐ๋์ ํฌํจ โ๏ธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ์ฝ๋ ์น์
: ์คํํ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ๋ถ๋ถ๋ฐ์ดํฐ ์น์
: ์ ์ญ ๋ณ์ ๋ฐ ์ ์ ๋ณ์๊ฐ ์ ์ฅ๋๋ ๋ถ๋ถ (๊ธฐํ ๋ถ๋ถ)ํ : ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์คํ : ๋ฉ์๋ ํธ์ถ ์ ์์ฑ๋๋ ์ง์ญ ๋ณ์์ ๋ฐํ ์ฃผ์๊ฐ ์ ์ฅ๋๋ ์์ญ (์ค๋ ๋์ ํฌํจ) โณ๏ธ ์ค๋ ๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์
์ ๋จ์ํ ํ๋ก์ธ์ค ๋ด์์ ์ฌ๋ฌ ์ค๋ ๋ ์กด์ฌ ๊ฐ๋ฅ ๐ ํ๋ก์ธ์ค๊ฐ ์ ๊ณตํ๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๊ณต์ โ๏ธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ๊ณต..
Java/๐ Effective Java
15. ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ถํ์ ์ต์ํ ์ ๊ทผ ์ ํ์๋ฅผ ์ ๋๋ก ํ์ฉํ๋ ๊ฒ์ด ์ ๋ณด ์๋(์บก์ํ)์ ํต์ฌ ๋ชจ๋ ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผ์ฑ์ ๊ฐ๋ฅํ ํ ์ขํ์ผ ํจํจํค์ง ์ธ๋ถ์์ ์ธ ์ด์ ๊ฐ ์๋ค๋ฉด package-private์ผ๋ก ์ ์ธํ ํด๋์ค์์๋ง ์ฌ์ฉํ๋ package-private ํฑ๋ ๋ฒจ ํด๋์ค๋ ์ธํฐํ์ด์ค๋ ์ด๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค ์์ private static์ผ๋ก ์ค์ฒฉ์ํค๊ธฐโจ public์ผ ํ์๊ฐ ์๋ ํด๋์ค์ ์ ๊ทผ ์์ค์ package-private ํฑ๋ ๋ฒจ ํด๋์ค๋ก ์ขํ๊ธฐ โณ๏ธ ์ ๊ทผ ์์ค private : ๋ฉค๋ฒ๋ฅผ ์ ์ธํ ํฑ๋ ๋ฒจ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ package-private : ๋ฉค๋ฒ๊ฐ ์์๋ ํจํค์ง ์์ ๋ชจ๋ ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅ. ์ ๊ทผ ์ ํ์๋ฅผ ๋ช
์ํ์ง ์์์ ๋ ์ ์ฉ๋๋ ํจํค์ง ์ ๊ทผ ์์ค.pro..
Java/๐ Effective Java
13. clone ์ฌ์ ์๋ ์ฃผ์ํด์ ์งํCloneable : ๋ณต์ ํด๋ ๋๋ ํด๋์ค์์ ๋ช
์ํ๋ ์ฉ๋์ ์ธํฐํ์ด์คObject์ protected ๋ฉ์๋์ธ clone์ ๋์ ๋ฐฉ์์ ๊ฒฐ์ Cloneable์ ์์ ํด๋์ค์ ์ ์๋ protected ๋ฉ์๋์ ๋์ ๋ฐฉ์์ ๋ณ๊ฒฝ์์ ๊ด๊ณ์ ๋ ํด๋์ค ์ค ํ์ ํด๋์ค์์ super.clone์ ํธ์ถํ๋ค๋ฉด ์๋ชป๋ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง ์ ์์ ๐ ํด๋์ค B๊ฐ ํด๋์ค A๋ฅผ ์์ํ ๋, ํ์ ํด๋์ค์ธ B์ clone์ B ํ์
๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํจ. ํ์ง๋ง A์ clone์ด new A(...)๋ก ์์ฑํ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๋ฉด, B์ clone๋ A ํ์
๊ฐ์ฒด๋ฅผ ๋ฐํ.โณ๏ธ ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ Stack ํด๋์ค ๋ณต์ ํ๊ธฐ public class Stack { private..
Java/๐ Effective Java
10. equals๋ ์ผ๋ฐ ๊ท์ฝ์ ์ง์ผ ์ฌ์ ์equals๋ฅผ ์ฌ์ ์ํ๋ ๊ฒฝ์ฐ๋ ...๐ ๋ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์์ง(๊ฐ์ฒด ์๋ณ์ฑ)๊ฐ ์๋๋ผ ๋
ผ๋ฆฌ์ ๋์น์ฑ์ ํ์ธํด์ผ ํ๋๋ฐ, ์์ ํด๋์ค์ equals๊ฐ ๋
ผ๋ฆฌ์ ๋์น์ฑ์ ๋น๊ตํ๋๋ก ์ฌ์ ์๋์ง ์์ ๋ โณ๏ธ ์ผ๋ฐ ๊ท์ฝ ๋์นญ์ฑ : x.equals(y)๊ฐ true์ด๋ฉด, y.equals(x)๋ true์ถ์ด์ฑ : x.equals(y)๊ฐ true์ด๊ณ , y.equals(z)๋ true์ด๋ฉด, x.equals(z)๋ true์ผ๊ด์ฑ : x.equals(y)๋ฅผ ๋ฐ๋ณตํด์ ํธ์ถํ๋ฉด ํญ์ true ๋๋ false ๋ฐํโณ๏ธ equals ๋ฉ์๋ ๊ตฌํ ๋ฐฉ๋ฒ== ์ฐ์ฐ์ ์ฌ์ฉํด ์
๋ ฅ์ด ์๊ธฐ ์์ ์ ์ฐธ์กฐ์ธ์ง ํ์ธ ๐ ์๊ธฐ ์์ ์ด๋ฉด true ๋ฐํinstanceof ์ฐ์ฐ์๋ก ์
๋ ฅ์ด ์ฌ๋ฐ๋ฅธ ํ..
Java/๐ ์ค๋ธ์ ํธ : ์ฝ๋๋ก ์ดํดํ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ
โจ ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์์์ ํต์ฌ : ์ญํ , ์ฑ
์, ํ๋ ฅ์์ ๋งํ๋ ํด๋์ค, ์์, ์ง์ฐ ๋ฐ์ธ๋ฉ์ด ๊ฐ์ฒด์งํฅ์์ ์ค์ํ์ง ์์ ๊ฒ์ด ์๋์ง๋ง, ์ด๋ค์ ๊ตฌํ ์ธก๋ฉด์ ์น์ฐ์ณ์ ธ ์๋ค. ๊ฐ์ฒด์งํฅ์์์ ํต์ฌ์ ์ญํ , ์ฑ
์, ํ๋ ฅ์ด๋ค. ํ๋ ฅ์ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ , ์ ์ ํ ์ฑ
์์ ํ ๋นํ๋ ๊ณผ์ ์์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ ํ์ธํ ์ ์๋ค. ํด๋์ค์ ์์๊ณผ ๊ฐ์ ๊ฒ์ ์ฑ
์๊ณผ ํ๋ ฅ์ด ์ด๋ ์ ๋ ์๋ฆฌ๋ฅผ ์ก์ ํ์ ์ฌ์ฉํ ์ ์๋ ๊ตฌํ ๋ฉ์ปค๋์ฆ์ธ ๊ฒ์ด๋ค. ํ๋ ฅ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฌด์์ธ๊ฐ๋ฅผ ์์ฒญํ๋ ๊ฒ ๐ ๋ฉ์์ง ์ ์ก (์์ฒญ๊ณผ ์๋ต)์์ ์๊ฒ ํ ๋น๋ ์ฑ
์์ ์ํํ ๋ ํ์ํ ์ ๋ณด๋ฅผ ์์ง ๋ชปํ๊ฑฐ๋ ์ธ๋ถ์ ๋์์ด ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง ์ ์กํด์ ํ๋ ฅ ์์ฒญ ๐ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ํ๋๊ณผ ์ํ..
Java/๐ Effective Java
4. ์ธ์คํด์คํ๋ฅผ ๋ง์ผ๋ ค๋ฉด private ์์ฑ์ ์ฌ์ฉ 5. ์์์ ์ง์ ๋ช
์ํ์ง ๋ง๊ณ ์์กด ๊ฐ์ฒด ์ฃผ์
์ฌ์ฉ ์ฌ์ฉํ๋ ์์์ ๋ฐ๋ผ ๋์์ด ๋ฌ๋ผ์ง๋ ํด๋์ค์๋ ์ ์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ ์ฑ๊ธํด ๋ฐฉ์ ์ ํฉ X๐ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์์ฑ์์ ํ์ํ ์์์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์ = ์์กด ๊ฐ์ฒด ์ฃผ์
์์ฑ์์ ์์ ํฉํ ๋ฆฌ๋ฅผ ๋๊ฒจ์คโจ ํฉํ ๋ฆฌ๐ ํธ์ถํ ๋๋ง๋ค ํน์ ํ์
์ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ณตํด์ ๋ง๋ค์ด์ฃผ๋ ๊ฐ์ฒด public class SpellChecker{ private final Lexicon dictionary; public SpellChecker(Lexicon dictionary){ this.dictionary = Objects.requireNonNull(dictionary); } ..
Java/๐ ์ค๋ธ์ ํธ : ์ฝ๋๋ก ์ดํดํ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ
์บก์ํ (Encapsulation)๋ชฐ๋ผ๋ ๋๋ ๊ฐ์ฒด ๋ด๋ถ์ ์ธ๋ถ์ ์ธ ์ฌํญ์ ๊ฐ์ถ๋ ๊ฒ๐ ๋ชฉ์ : ๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ๊ฐ์ฒด ๋ง๋ค๊ธฐ ์บก์ํ๋ฅผ ํตํด ๊ฐ์ฒด ๋ด๋ถ๋ก์ ์ ๊ทผ์ ์ ํํ๋ฉด ๊ฐ์ฒด์ ๊ฐ์ฒด ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์ โ ์ค๊ณ ์ข๋ ์ฝ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ โก๏ธ ๊ฐ์ฒด๋ฅผ ์ธํฐํ์ด์ค์ ๊ตฌํ์ผ๋ก ๋๋๊ณ ์ธํฐํ์ด์ค๋ง์ ๊ณต๊ฐํด ๊ฐ์ฒด ์ฌ์ด์ ๊ฒฐํฉ๋ ๋ฎ์ถ๊ณ ๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ์ฝ๋ ์์ฑ ์์ง๋ (Cohesion)๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ์์
๋ง์ ์ํํ๊ณ ์ฐ๊ด์ฑ ์๋ ์์
์ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์ ๐ ์์ง๋๊ฐ ๋์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ค๋ก ์ฒ๋ฆฌํ๋ ์์จ์ ์ธ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด ๊ฒฐํฉ๋↓, ์์ง๋↑ โจ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (Object-Oriented Programming)๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ๐ ๋ฐ์ดํฐ์ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ๋ชจ..