20210201 - java-squid/effective-java GitHub Wiki

ํšŒ๊ณ 

Sunny

  • ๋ฉด์ ‘ 1ํšŒ ๋ดค๋‹ค...
  • ๋ฌด์ง€๊ฐœ๊ณฐ ์ฑ…(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์ž…๋ฌธ) ๋‹ค ๋ดค๋‹ค!
    • ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ํŠธ๋ž™์žญ์…˜์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด ๋‚˜์™€์„œ ์ข‹์•˜๋‹ค.
  • ์ด๋ฒˆ ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์•„์ดํ…œ๋“ค์€ ํด๋ฆฐ ์ฝ”๋“œ์— ๋‚˜์˜ค๋Š” ๋‚ด์šฉ๋“ค๊ณผ ์—ฐ๊ด€์ด ์žˆ์–ด์„œ ๊ฐ™์ด ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค.

Han

  • ์ด๋ฒˆ ์•„์ดํ…œ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค. ์–‘์ด ๋งŽ์•„์„œ ๋‹คํ–‰.
  • ๊ฐ€๋Šฅํ•˜๋ฉด ์•„์ดํ…œ ํ•˜๋‚˜๋‹น ์งˆ๋ฌธ, ๋А๋‚Œ์„ ๋‚จ๊ธฐ๋ ค๊ณ  ๋…ธ๋ ฅ.
  • ์ด๋ฒˆ์ฃผ๋Š” ๋ฌด๋‚œํ–ˆ๋‹ค. ๋‹ค๋งŒ ์ผ๊ต์ฐจ๊ฐ€ ์ปค์„œ ๊ฐ๊ธฐ๊ฑธ๋ฆฌ๊ธฐ ์‰ฝ๋‹ค. ๊ฑด๊ฐ• ์กฐ์‹ฌํ•˜์ž.

David

  • ์ด๋ฒˆ ํ•™๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์—…์„ ์‹œ์ž‘. ํ•™๊ธฐ ์ดˆ๋ฐ˜์— SQL ๊ณต๋ถ€. ์ผ์ฃผ์ผ ๋™์•ˆ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์ด ์ฝ”์ฟผ์—์„œ ๋ฐฐ์› ๋˜ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์•˜๋‹ค.
  • ์ˆ˜์—…์—์„  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฐ์› ์Œ. DB๋งŒ๋“œ๋Š” ์ˆ˜์—…์ด๋ผ ๊ธฐ๋Œ€๊ฐ€ ํฌ๋‹ค.
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ„๋„์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1๊ฐœ ์ด์ƒ ํ’€๋ฉด์„œ ๋งค์ผ ๊ธฐ๋กํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ.
  • ํ•˜๋ฉด ํ• ์ˆ˜๋ก ํ‘ธ๋Š” ์†๋„๋„ ๋นจ๋ผ์ง€๊ณ  ํ’€๊ธฐ ์‰ฌ์›Œ์ง€๊ณ  ์žˆ๋‹ค. ๋งŒ์กฑ.
  • ์•„์ดํ…œ๋“ค์ด ๋Œ€๋ถ€๋ถ„ ์งง๊ณ , ์‰ฌ์› ๋‹ค.

Pyro

  • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์ด๋ฒˆ์ฃผ ์•„์ดํ…œ๋“ค์€ ์ง€๋‚œ ํ•จ์ˆ˜ํ˜•๋ณด๋‹ค ์‰ฌ์› ๋‹ค.
  • CS10์—์„œ ๋„์ปค, ํด๋ผ์šฐ๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ณ ์ƒํ–ˆ๋‹ค.
  • Honux์˜ ๋ฌธ์ œ. batch insert, bulk insert ์‹œ๋„. ๋‘๊ฐœ์˜ ์ฐจ์ด์ ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

Roach

  • ์•ˆํƒ€๊น๊ฒŒ๋„ ๊ณต๋ถ€๊ฐ€ ์ž˜ ์•ˆ๋˜์—ˆ๋‹ค. -> ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ํ’€์—ˆ์Œ.
  • ํ•˜๋ฃจ์— ํ•˜๋‚˜์”ฉ ํ‘ธ๋‹ˆ ๋Š˜๊ณ  ์žˆ๋‹ค. ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์ž์ œํ•˜๊ณ  ์‰ฌ์šด ๋ฌธ์ œ ์œ„์ฃผ๋กœ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Œ. -> ๋‚˜์ค‘์— ์ฐจ์ฐจ ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ํ’€ ๊ฒƒ.
  • ๋ฐฑ์ค€๋ณด๋‹ค ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๊ฐ€ ๋” ์žฌ๋ฐŒ์Œ. ํผ์ฆํ‘ธ๋Š”๋А๋‚Œ์ด๋ผ ๋” ๋‚˜์Œ.
  • ๊ฐœ์ธ์ ์œผ๋กœ ์–ด๋ ค์šด ๋‚ด์šฉ์€ ์—†์—ˆ๋‹ค. ๋ฌธ์ž์—ด ๊ด€ํ•œ ๋‚ด์šฉ์—์„œ ์—ด๊ฑฐ ํƒ€์ž…์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋‚˜์™”๋Š”๋ฐ ํ•˜๋‚˜๊ฐ€ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค.
  • 34์žฅ์„ ์ฝ๊ณ , ํ•œ์ด ๋Œ“๊ธ€์„ ๋ณด๋‹ˆ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.

๊ทธ ์™ธ

Items

Item56

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

Item57

  • ์ง€์—ญ๋ณ€์ˆ˜ ๋ฒ”์œ„ ์ตœ์†Œํ™”๊ฐ€ ํ•ต์‹ฌ.
  • ์„ธ๊ฐ€์ง€ ์š”์•ฝ
    1. ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๋ผ.
    2. ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™” ํ•˜๋ผ.
    3. ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค๊ณ , SRP ๋ฅผ ์ง€์ผœ๋ผ
  • ์ด ์•„์ดํ…œ์„ ์ ์šฉํ•˜๋Š” ์ด์œ ๋Š” SRP๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ๊ฒƒ. ์ด ์•„์ดํ…œ์˜ SRP๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ธ”๋ก๋‹จ์œ„๋กœ ์ขํ˜€์„œ ์ •์˜.

Item58

  • for-each
  • ์ผ๊ธ‰ ๊ฐ์ฒด์™€ ์•„์ดํ…œ 18๊ณผ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์Œ.

Item59

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž. -> ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ๋†’์—ฌ์ค€๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ฆ๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ž. -> ์‹œ๊ฐ„๋‚  ๋•Œ ๋œฏ์–ด์„œ ๊ณต๋ถ€ํ•˜์ž.
  • ์•„์ดํ…œ18์˜ ๋ž˜ํผํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๊ฒ€์ฆ๋œ ๊ฒƒ)์„ ํ™œ์šฉํ•˜์ž.

Item60

  • ํ˜„์ง์—์„œ๋Š” BigDecimal์„ ๋ณ€ํ™˜ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • BigDecimal์€ ๋ถˆํŽธํ•˜๊ฒŒ ๋งŽ๋‹ค.

Item61

  • IntegerCache์— ์ €์žฅํ•˜์—ฌ -128 ~ 127๊นŒ์ง€๋Š” ์ฃผ์†Œ๊ฐ’๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅ.
  • String์€ static Area์— ์ €์žฅ.
  • boxing์„ ํ•  ๋•Œ๋งˆ๋‹ค, ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜๋Š” ๊ฑด ์„ฑ๋Šฅ์ƒ ๋ถ€๋‹ด๋ ๋“ฏ

Item62

  • ThreadLocal์€ ๊ฐ ์“ฐ๋ ˆ๋“œ์— ๊ณ ์œ ์˜ ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค. -> String๋ณด๋‹ค๋Š” Key ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ณ ์œ ์˜ ์“ฐ๋ ˆ๋“œ๋กœ ์ง€์ •์ด ๊ฐ€๋Šฅ.

Item63

  • String์ด n๊ฐœ ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž‡๋Š” ์‹œ๊ฐ„์€ n^2๋‹ค.
  • String + String์„ ํ•  ๊ฒฝ์šฐ ๋ณต์‚ฌ๋ณธ ํ•˜๋‚˜ ๋” ์ƒ๊ธด๋‹ค.

Item64

  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์“ฐ๊ณ  ์—†์œผ๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž.
  • ๋ฐ”๊พธ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ์‚ฌ์šฉํ•˜์ž.
  • ์Šคํ”„๋ง์˜ IoC, DI
  • SOLID์›์น™์˜ O,L,D์™€ ๊ด€๋ จ.

๋งˆ๋ฌด๋ฆฌ