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] ์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ

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