item 51 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์‹ ์ค‘ํžˆ ์„ค๊ณ„ํ•˜๋ผ

  • API ์„ค๊ณ„ ์š”๋ น
  • ์š”๋ น์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ , ์“ฐ๊ธฐ ์‰ฝ๊ณ , ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ ์€ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์‹ ์ค‘ํžˆ ์ง“์ž.

  • ํ•ญ์ƒ ํ‘œ์ค€ ๋ช…๋ช… ๊ทœ์น™(์•„์ดํ…œ 68-์ผ๋ฐ˜์ ์œผ๋กœ ํ†ต์šฉ๋˜๋Š” ๋ช…๋ช…๊ทœ์น™์„ ๋”ฐ๋ฅด๋ผ)
  • ์ฒ ์ž ๊ทœ์น™์€ ํŒจํ‚ค์ง€, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ, ํƒ€์ž… ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์œผ ๋‹ค๋ฃฌ๋‹ค.
  • ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ ์ด๋ฆ„์€ ์ฒซ๊ธ€์ž๋Š” ์†Œ๋ฌธ์ž
  • ์ƒ์ˆ˜ ํ•„๋“œ๋Š” ๋Œ€๋ฌธ์ž (๋‹จ์–ด ์‚ฌ์ด๋Š” ๋ฐ‘์ค„๋กœ ๊ตฌ๋ถ„)

static final VALUES

  • ์ง€์—ญ๋ณ€์ˆ˜์—๋„ ๋‹ค๋ฅธ ๋ฉค๋ฒ„์™€ ๋น„์Šทํ•œ ๋ช…๋ช… ๊ทœ์น™, ์•ฝ์–ด๋ฅผ ์จ๋„ ์ข‹๋‹ค. ์•ฝ์–ด๋ฅผ ์จ๋„ ๊ทธ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋งฅ์—์„œ ์˜๋ฏธ๋ฅผ ์‰ฝ๊ฒŒ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ง€์—ญ๋ณ€์ˆ˜์˜ ํ•˜๋‚˜๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ ์„ค๋ช… ๋ฌธ์„œ์—๊นŒ์ง€ ๋“ฑ์žฅํ•˜๋Š” ๋งŒํผ ์ง€์—ญ๋ณ€์ˆ˜๋ณด๋‹ค๋Š” ์‹ ๊ฒฝ์„ ์จ์•ผํ•œ๋‹ค.

  • ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ ๋ณดํ†ต ํ•œ ๋ฌธ์ž๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

์ž„์˜์˜ ํƒ€์ž…์—” T, ์ปฌ๋ ‰์…˜ ์›์†Œ์˜ ํƒ€์ž…์€ E, ๋งต์˜ ํ‚ค์™€ ๊ฐ’์—๋Š” K์™€ V๋ฅผ ์˜ˆ์™ธ์—๋Š” X๋ฅผ, ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์—๋Š” R

ํŽธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋งŒ๋“ค์ง€ ๋ง์ž.

  • ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ž ์ž์‹ ์˜ ์†Œ์ž„์„ ๋‹คํ•ด์•ผํ•œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ํด๋ž˜์Šค๋Š” ์ตํžˆ๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. (์ธํ„ฐํŽ˜์ด์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์€ ์งง๊ฒŒ ์œ ์ง€ํ•˜์ž.

  • 4๊ฐœ ์ดํ•˜๊ฐ€ ์ข‹๋‹ค.
  • ๊ฐ™์€ ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์—ฐ๋‹ฌ์•„ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ํŠนํžˆ ํ•ด๋กญ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ ์‹ค์ˆ˜๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ” ์ž…๋ ฅํ•ด๋„ ๊ทธ๋Œ€๋กœ ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๊ธฐ์ˆ  3๊ฐ€์ง€

  • ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋กœ ์ชผ๊ฐ ๋‹ค. ์ชผ๊ฐœ์ง„ ๋ฉ”์„œ๋“œ ๊ฐ๊ฐ์€ ์›๋ž˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋ฐ›๋Š”๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ๋„์šฐ๋ฏธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ์œ„ ๋‘๊ฐ€์ง€ ๊ธฐ๋ฒ•์„ ํ˜ผํ•ฉํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ์— ์‚ฌ์šฉํ•œ ๋นŒ๋” ํŒจํ„ด์„ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์— ์‘์šฉํ•œ๋‹ค.

๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ํŠนํžˆ ๊ทธ์ค‘ ์ผ๋ถ€๋Š” ์ƒ๋žตํ•ด๋„ ๊ดœ์ฐฎ์„ ๋•Œ ๋„์›€์ด ๋œ๋‹ค. ๋จผ์ € ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด ๊ฐ์ฒด์˜ ์„ธํ„ฐ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ํ•„์—ฌํ•œ ๊ฐ’์„ ์„ค์ •ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์œผ๋กœ๋Š” ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋” ๋‚ซ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด (์ด๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ) ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ž.

์˜ˆ๋ฅผ๋“ค์–ด ๋ฉ”์„œ๋“œ์— HashMap์„ ๋„˜๊ธธ ์ผ์€ ์ „ํ˜€ ์—†๋‹ค. ๋Œ€์‹  Map์„ ์‚ฌ์šฉํ•˜์ž.

  • ์ธํ„ฐํŽ˜์ด์Šค ๋Œ€์‹  ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํŠน์ • ๊ตฌํ˜„์ฒด๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ๊ผด์ด๋ฉฐ ํ˜น์‹œ๋ผ๋„ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ช…์‹œํ•œ ํŠน์ • ๊ตฌํ˜„์ฒด์˜ ๊ฐ์ฒด๋กœ ์˜ฎ๊ฒจ ๋‹ด๋Š๋ผ ๋น„์‹ผ ๋ณต์‚ฌ ๋น„์šฉ์„ ์น˜๋Ÿฌ์•ผ ํ•œ๋‹ค.

boolean ๋ณด๋‹ค๋Š” ์›์†Œ 2๊ฐœ์งœ๋ฆฌ ์—ด๊ฑฐ ํƒ€์ž…์ด ๋‚ซ๋‹ค. (๋ฉ”์„œ๋“œ ์ด๋ฆ„์ƒ boolean์„ ๋ฐ›์•„์•ผ ์˜๋ฏธ๊ฐ€ ๋” ๋ช…ํ™•ํ•  ๋•Œ๋Š” ์˜ˆ์™ธ๋‹ค).

  • ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง„๋‹ค.