20201109 - java-squid/effective-java GitHub Wiki
ํ๊ณ
Sunny
- ์ ์ฉํ ์ ์๋ ๋ถ๋ถ์ด ๋ ๋ง์ ๊ฒ ๊ฐ์์ ์ฌ๋ฏธ์์๋ค.
Han
- ์์ดํ
6๊ฐ๋ ๋ฒ๊ฑฐ์ด ๋๋...
- ์คํฐ๋ ์๊ฐ์ ์์์ผ๋ก ์ฎ๊ธด ๊ฑด ์ข์ ๊ฑฐ ๊ฐ๋ค.
Henry
- ํ ๋ฒ๋ง ์ฝ์ ์ฑ
์ ์๋๊ธฐ ๋๋ฌธ์ ์์ดํ
ํ๋ ํ๋ ์ ๋ฆฌํ๊ธฐ ๋ณด๋ค๋ ํ์ด๋ณด๋ ๋๋์ผ๋ก ํด๋ดค๋ค.
David
- ๋ฌด์จ ์ง๋ฌธ์ ํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค...
- ๋๋ฌด ์ด๋ ต๊ฑฐ๋ ์กฐ๊ธ ๋๋จ์ด์ง ๋ด์ฉ์ ๋งํน์ ํด์ ๋ฌผ์ด๋ณด์.
- ๋ด์ฉ์ ์ผ๋ก๋ ๋งค์ฐ ์ฌ๋ฐ์๋ค.
Items
[์์ดํ
15] ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ถํ์ ์ต์ํํ๋ผ
- ์ ๊ทผ ์ ์ด์๋ ํด๋ผ์ด์ธํธ๋จ ์ฝ๋๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ๋ ๋ ๋ ํฐ ์๋ฏธ๋ฅผ ๊ฐ๊ฒ๋๋ค.
- ํด๋์ค์ ๋ฉค๋ฒ (ํนํ ๊ฐ๋ณ ๊ฐ์ฒด๋ ๋ฐฐ์ด)์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ์ต์ํํจ์ผ๋ก์ ์บก์ํ์ ๋์ปคํ๋ง, ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
- ํ
์คํธ ์ฝ๋๊ฐ ์์ค ์ฝ๋์ ๋์ผํ ํจํค์ง ๊ตฌ์กฐ์ ์ํด์๋ ์ด์ ๊ฐ ์ ๊ทผ์ ์ด์์ ๋์๋ฐฉ์์ ์๋ค.
- ๋ชจ๋ ์์คํ
์ ๋์
์ ๋ํด์๋ ๋ณด์์ ์ผ๋ก ์ง์ผ๋ณด์.
[์์ดํ
16] public ํด๋์ค์์๋ public ํ๋๊ฐ ์๋ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ผ
- ๊ฐ์ฒด์ ํ๋์ ์ ๊ทผ ์ ์ด์๋ฅผ private์ผ๋ก ์ค์ ํ๊ณ getter์ setter๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ๋ฒ ์คํธ ํ๋ํฐ์ค๊ฐ ๋ ์ด์ ๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์๊ฐํด๋ณด์.
- public ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ (ํนํ ๋ถ๋ณ ํ๋์ธ ๊ฒฝ์ฐ)์๋ publicํ๊ฒ ์ด์ด๋์๋ ๋ฌด๊ดํ๋ค!
[์์ดํ
17] ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์ต์ํํ๋ผ
- ๋ถ๋ณ๊ฐ์ฒด๋ ์ํ์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ณธ์ง์ ์ผ๋ก ์ค๋ ์ค ์์ ์ฑ์ ๋ณด์ฅํ๋ฉฐ ๋ํ ์์์น ๋ชปํ ์ํ ๋ณํ๋ก ์ธํด ์๊ธฐ๋ ๋ฒ๊ทธ ๋ฐ ๋ฌธ์ ์ ๋ค๋ก๋ถํฐ ์์ ํ๋ค.
- ๋ถ๋ณ๊ฐ์ฒด์ ๋จ์ ์ ๋ง์ ๊ฐ์ฒด ์์ฑ์ด ๊ฐ์๋๋ค๋ ์ ์ธ๋ฐ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๋๋ฐ ํด๋์ค๋ฅผ ํ์ฉํ๊ฑฐ๋ (e.g. StringBuilder) ๊ฐ์ฒด ์ธ๋ถ์ ์ผ๋ก๋ง ๋ถ๋ณ์ฑ์ ์ ์งํ๊ณ ๋ด๋ถ์ ์ผ๋ก๋ lazy ์์ฑ, ์บ์ฑ ๋ฑ์ ํ์ฉํด ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์๋ค.
- ๊ฐ์ฒด๋ ๊ฐ๋ฅํ๋ฉด ๋ถ๋ณ๊ฐ์ฒด๋ก ์ ์ํ๊ณ , ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ฐ๋ณ์ฑ์ ์ต์ํํ๊ณ ์ฌ์ฌ์ฉ์ ๊ธ์งํ๋ ๊ฒ์ ์งํฅํ๋ค (e.g. CountDownLatch).
[์์ดํ
18] ์์๋ณด๋ค๋ ์ปดํฌ์ง์
์ ์ฌ์ฉํ๋ผ
- ์์์ ์บก์ํ๋ฅผ ํด์น๋ค! ํ์ ํด๋์ค๋ ์์ฒ์ ์ผ๋ก ์์ ํด๋์ค์ ๊ตฌํ์ ์์กด์ ์ผ ์ ๋ฐ์ ์๋ค.
- ์ปดํฌ์ง์
์ด๋ผ๋ ๊ฐ๋
์ ๋จ์ํ๊ฒ, ๋๊ฒ ๋ณด์๋ฉด ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๊ฐ๋
์ด๋ค.
- ์์ดํ
์์ ์ ์ํ๋ ๊ฐ์ฒด์ ํ์ฅ์ ์ ํํ ๋งํ์๋ฉด ์ปดํฌ์ง์
๋ง์ด ์๋ wrapper class ํจํด / Decorator ํจํด์ ํตํด ๊ตฌํํ๋ ๊ฒ์ด๋ค.
- ์์ดํ
์ ํต์ฌ์ wrapper class ํจํด์ ํ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ํ์ฅํ๋ฉด ์บก์ํ๋ฅผ ํด์น์ง ์์ผ๋ฉด์๋ ๋ ์ ์ฐํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด๋ค.
[์์ดํ
19] ์์์ ๊ณ ๋ คํด ์ค๊ณํ๊ณ ๋ฌธ์ํํ๋ผ. ๊ทธ๋ฌ์ง ์์๋ค๋ฉด ์์์ ๊ธ์งํ๋ผ
- ์์ ๊ด๊ณ์ ์์ ๋ ์์ ํด๋์ค์ ์์ฑ์๊ฐ ํ์ ํด๋์ค ์์ฑ์ฌ๋ณด๋ค ๋จผ์ ์คํ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ ํด๋์ค์ ์์ฑ์์์๋ ์ค๋ฒ๋ผ์ด๋ ๋ ์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ ๋๋ค.
- ๊ฐ์ฒด์ ํ์ฅ์ ๊ฐ๋ฅํ๋ฉด ์์์ด ์๋ wrapper class ํจํด์ ํ์ฉํด์ ๊ตฌํํ์.
- ์์์ ํด์ผํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ์ ๋ง์ถฐ ์ค๊ณํ๊ณ ๋ฌธ์ํ๋ฅผ ์ฒ ์ ํ ํด์ผํ๋ค.
[์์ดํ
20] ์ถ์ ํด๋์ค๋ณด๋ค๋ ์ธํฐํ์ด์ค๋ฅผ ์ฐ์ ํ๋ผ
- ์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค์ ์์ธํ ์ฐจ์ด๋ ์ด ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข์ ๊ฑฐ ๊ฐ๋ค.
- ์ธํฐํ์ด์ค์ ๋
๋ณด์ ์ธ ์ฅ์ ์ ๋ค์ค์์์ ํตํด ์ ์ฐํ๊ฒ ๊ฐ์ฒด๋ฅผ ํ์ฅํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- ๊ณจ๊ฒฉ ๊ตฌํ๊ณผ ๊ฐ์ด ๊ณต์ ๋ก์ง์ ์ถ๊ฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ ์ถ์ ํด๋์ค์ ๊ฐ์ด ํ์ฉํ๋ ๊ฒ์ด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ฌ์ค๋ค.