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...) ์‚ฌ์šฉํ•  ๋•Œ
  • ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ์—†๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ

image

java.io package ๊ณ„์ธต๋„

์ธํ„ฐํŽ˜์ด์Šค์— ์—†๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ?

์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ํด๋ž˜์Šค์˜ ๊ณ„์ธต๊ตฌ์กฐ ์ค‘ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ๋œ ๊ตฌ์ฒด์ ์ธ ์ƒ์œ„์˜ ํด๋ž˜์Šค๋ฅผ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ