item 64 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ์์ดํ 51 ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ์ ์คํ ์ค๊ณํ๋ผ ์์ ๋งค๊ฐ๋ณ์ ํ์ ์ผ๋ก ํด๋์ค๊ฐ ์๋๋ผ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ผ ๋ ๋ด์ฉ์ด ์๋ค.
- ์๋ฅผ ๋ค์ด ๋ฉ์๋์ HashMap์ ๋๊ธธ ์ผ์ ์ ํ ์๋ค. ๋์ Map์์ฌ์ฉํ์. ๊ทธ๋ฌ๋ฉด ์ด๋ค Map ๊ตฌํ์ฒด๋ ์ธ์๋ก ๊ฑด๋ฌ ์ ์๋ค. (TreeMap, ConcurrentHashMap)
- ์ธํฐํ์ด์ค ๋์ ์ํด๋์ค๋ฅผ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ์๊ฒ ํน์ ๊ตฌํ์ฒด๋ง ์ฌ์ฉํ๋๋ก ์ ํํ๋ ๊ผด์ด๋ฉฐ ํน์๋ผ๋ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ํํ๋ก ์กด์ฌํ๋ค๋ฉด ๋ช ์ํ ํน์ ๊ตฌํ์ฒด์ ๊ฐ์ฒด๋ก ์ฎ๊ฒจ ๋ด๋๋ผ ๋น์ผ ๋ณต์ฌ ๋น์ฉ์ ์น๋ฌ์ผ ํ๋ค.
- ์ด ๋ด์ฉ์ ๊ฐ์ฒด๋ ํด๋์ค๊ฐ ์๋ ์ธํฐํ์ด์ค๋ก ์ฐธ์กฐํ๋ผ ๊ณ ๊น์ง ํ์ฅํ ์ ์๋ค.
์ ํฉํ ์ธํฐํ์ด์ค๋ง ์๋ค๋ฉด ๋งค๊ฐ๋ณ์๋ฟ ์๋๋ผ ๋ฐํ๊ฐ, ๋ณ์, ํ๋๋ฅผ ์ ๋ถ ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ์ ์ธํ๋ผ.
- ๊ฐ์ฒด์ ์ค์ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ ์ํฉ์ ์ค์ง ์์ฑ์๋ก ์์ฑํ ๋ ๋ฟ์ด๋ค.
// ์ข์ ์. ์ธํฐํ์ด์ค๋ฅผ ํ์
์ผ๋ก ์ฌ์ฉํ๋ค.
Set<Son> sonSet = new LinkedHashSet<>();
// ๋์ ์. ํด๋์ค๋ฅผ ํ์
์ผ๋ก ์ฌ์ฉํ๋ค.
LinkedHashSet<Son> sonSet = new LinkedHashSet<>();
//์ข์ ์
Set<Son> sonSet = new TreeSet<>();
//๋์ ์
LinkedHashSet<Son> sonSet = new TreeSet<>(); //์ปดํ์ผ ์๋ฌ!
- ์์ ์ข์ ์๋ Set ์ธํฐํ์ด์ค ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ํ์/๋ฐํ์์ ์ ํ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
- ๋์ ์๋ LinkedHashSet ํ์ ์ด๊ธฐ ๋๋ฌธ์ TreeSet์ LinkedHashSet๋ก ํ๋ณํ ํ ์ ์๋ค๊ณ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ธํฐํ์ด์ค๋ฅผ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ต๊ด์ ๊ธธ๋ฌ๋๋ฉด ํ๋ก๊ทธ๋จ์ด ํจ์ฌ ์ ์ฐํด์ง ๊ฒ์ด๋ค.
๋์ค์ ๊ตฌํ ํด๋์ค๋ฅผ ๊ต์ฒดํ๊ณ ์ ํ๋ค๋ฉด ๊ทธ์ ์ ํด๋์ค์ ์์ฑ์(ํน์ ๋ค๋ฅธ ์ ์ ํฉํฐ๋ฆฌ)๋ฅผ ํธ์ถํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
Set<Son> sonSet = new HashSet<>();
- ๋ค๋ฅธ ์ฝ๋๋ ์ ํ ์๋์ง ์๊ณ ์๋ก ๊ตฌํํ ํด๋์ค๋ก์ ๊ต์ฒด๊ฐ ์๋ฃ๋๋ค.
- ์ฃผ๋ณ ์ฝ๋๋ ์ ํด๋์ค์ ์กด์ฌ๋ฅผ ์ ์ด๋ถํฐ ๋ชฐ๋์ผ๋ ์ด๋ฌํ ๋ณํ์ ์๋ฌด๋ฐ ์ํฅ๋ ๋ฐ์ง ์๋๋ค.
- ์ธํฐํ์ด์ค ํ์ ์ ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋ค๋ฅธ ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ปดํ์ผ์๋ฌ/๋ฐํ์์๋ฌ์ ๋ํ ๊ฑฑ์ ์ ํ์ง ์์๋ ๋๋ค.
- ์ธํฐํ์ด์ค ํ์ ์ ์ ์ธ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋ฉ์๋๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ํน์ ๊ตฌํ์ฒด์ ๋ด๋ถ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์๋์ ํด๋์ค๊ฐ ์ธํฐํ์ด์ค์ ์ผ๋ฐ ๊ท์ฝ ์ด์ธ์ ํน๋ณํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ์ฃผ๋ณ ์ฝ๋๊ฐ ์ด๊ธฐ๋ฅ์ ๊ธฐ๋์ด ๋์ํ๋ค๋ฉด ์๋ก์ด ํด๋์ค๋ ๋ฐ๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๋ค.
- ์ ์ธ ํ์ ๊ณผ ๊ตฌํ ํ์ ์ ๋์์ ๋ฐ๊ฟ ์ ์์ผ๋ ๋ณ์๋ฅผ ๊ตฌํ ํ์ ์ผ๋ก ์ ์ธํด๋ ๊ด์ฐฎ์ ๊ฑฐ๋ผ ์๊ฐํ ์๋ ์๋ค. ํ์ง๋ง ์ปดํ์ผ๋์ง ์๋๋ค.
ํด๋ผ์ด์ธํธ์์ ๊ธฐ์กด ํ์ ์์๋ง ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ธฐ์กด ํ์ ์ ์ฌ์ฉํด์ผ ํ๋ ๋ค๋ฅธ ๋ฉ์๋์ ๊ทธ ์ธ์คํด์ค๋ฅผ ๋๊ฒผ๋ค๊ณ ํ ๊ฒฝ์ฐ ์๋ก์ด ์ฝ๋์์ ์ปดํ์ผ๋์ง ์์ ๊ฒ์ด๋ค.
-
String, Integer, Long๊ณผ ๊ฐ์ด ๊ฐ ํ์ ์ ๋ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํด์ผ ํ๋ค.
- Integer, Long๊ณผ ๊ฐ์ ํ์ ์ ์ฌ์ฉํ ๋๋ Number์ ๊ฐ์ ์์ ํ์ ์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค.
- ํ๋ณํ์ด ๋ฐ์ ํ ๋ ํน์ ๋ฐ์ดํฐ๊ฐ ์ ์ญ๋์ด ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ธํฐํ์ด์ค๋ ์์ ํ์ ๋ณด๋ค๋ ๋ณธ๋์ ํด๋์ค๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด ์ข๋ค.
-
OutputStream ๋ฑ java.io ํจํค์ง์ ์ฌ๋ฌ ํด๋์ค๊ฐ ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ํ๋ ์ด์์ํฌ๊ฐ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ค์ด๋ค.
- ํน์ ๊ตฌํ ํด๋์ค ๋ณด๋ค๋ (๋ณดํต์ ์ถ์ ํด๋์ค์ธ) ๊ธฐ๋ฐ ํด๋์ค๋ฅผ ์ฌ์ฉํด ์ฐธ์กฐํ๋ ๊ฒ ์ข๋ค.
-
์ธํฐํ์ด์ค์๋ ์๋ ํน๋ณํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ํด๋์ค๋ค์ด๋ค.
- PriorityQueue ํด๋์ค๋ Queue ์ธํฐํ์ด์ค์๋ ์๋ comparator ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.