item 64 SeungminLee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e ์์ดํ 64f๋ฅผ ์์ฝํ ๋ด์ฉ ์ ๋๋ค.
์ ํฉํ ์ธํฐํ์ด์ค๋ง ์๋ค๋ฉด ๋งค๊ฐ๋ณ์๋ฟ ์๋๋ผ ๋ฐํ๊ฐ, ๋ณ์, ํ๋๋ฅผ ์ ๋ถ ์ธํฐํ์ด์ค ํ์
์ผ๋ก ์ ์ธํ๋ผ.
๊ฐ์ฒด์ ์ค์ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ ์ํฉ์ '์ค์ง' ์์ฑ์๋ก ์์ฑํ ๋๋ฟ์ด๋ค.
// ์ธํฐํ์ด์ค ํ์
์ ์ฌ์ฉ
Set<Son> sonSet = new LinkedHashSet<>();
// ํด๋์ค ํ์
์ ์ฌ์ฉ
LinkedHashSet<Son> sonSet = new LinkedHashSet<>();์ธํฐํ์ด์ค๋ฅผ ํ์
์ผ๋ก ์ฌ์ฉํ๋ ์ต๊ด์ ๊ธธ๋ฌ๋๋ฉด ํ๋ก๊ทธ๋จ์ด ํจ์ฌ ์ ์ฐํด์ง๋ค.
// ์ธํฐํ์ด์ค ํ์
์ฌ์ฉ ํด์ ๋ณ๊ฒฝ
// IBank myBank = ShinhanBank.newInstance("์ด์น๋ฏผ");
// myBank.openAccount();
IBank myBank = WoriBank.newInstance(123);
myBank.openAccount();
// ํด๋์ค ํ์
์ฌ์ฉ ํด์ ๋ณ๊ฒฝ
// ShinhanBank myBank2 = ShinhanBank.newInstance("์ด์น๋ฏผ2");
// myBank2.openAccount();
// myBank2.printUserName();
WoriBank myBank2 = WoriBank.newInstance(1234);
myBank2.openAccount();
myBank2.printUserId();์ธํฐํ์ด์ค ํ์ IBank๋ฅผ ์ฌ์ฉํ๋ค๋ฉด IBank์ ๋ฉ์๋๋ค๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ฒด์ธ ShinhanBank ์์ WoriBank ๋ก ํด๋์ค ๊ต์ฒด๊ฐ ์์ฝ๊ฒ ์ผ์ด๋๋ค. ๊ทธ๋ฌ๋ ShinhanBank ํด๋์ค ํ์ ์ ์ฌ์ฉํ๋ฉด WoriBank๋ก ๋ค ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๊ณ ShinhanBank์ ๊ตฌํ๋์ด์๋ ๋ฉ์๋๋ค๋ ์ ๊ฑฐ๋ฅผ ํด์ค์ผํ๋ค.
์ฃผ๋ณ ์ฝ๋๋ค์ IBank์ ์กด์ฌ๋ง ์์์ง ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ธ ShinhanBank๋ฅผ ๋ชฐ๋์ผ๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
ํด๋์ค๋ฅผ ์ฐธ์กฐํด์ผํ๋ ๊ฒฝ์ฐ
- String๊ณผ Big Integer๊ณผ ๊ฐ์
๊ฐ์ ๋ด๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ - ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ํ๋ ์ ์ํฌ๊ฐ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ฅผ (java.io ํจํค์ง ๊ฐ์ฒด๋ค, Localdatetime etc...) ์ฌ์ฉํ ๋
- ์ธํฐํ์ด์ค์๋ ์๋ ํน๋ณํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ํด๋์ค๋ค์ ์ฌ์ฉํ ๋

java.io package ๊ณ์ธต๋
์ธํฐํ์ด์ค์ ์๋ ํน๋ณํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ํด๋์ค๋ค์ ์ฌ์ฉํ ๋?
์ ํฉํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ฉด ํด๋์ค์ ๊ณ์ธต๊ตฌ์กฐ ์ค ํ์ํ ๊ธฐ๋ฅ์ ๋ง์กฑํ๋ ๊ฐ์ฅ ๋ ๊ตฌ์ฒด์ ์ธ ์์์ ํด๋์ค๋ฅผ ํ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.