20210118 - java-squid/effective-java GitHub Wiki

ํšŒ๊ณ 

Han

  • ์Šคํ„ฐ๋”” ๊ถค๋„์— ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™๋‹ค
  • ์ €๋ฒˆ์ฃผ์— ๋ˆˆ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์™€์„œ, ๋‚˜๊ฐ€์งˆ ์•Š์•˜๋‹ค.

David

  • ๋‹ค์Œ์ฃผ ๊ฐœ๊ฐ•
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‘ธ๋Š” ์ค‘.
  • ์‰ฌ์šด๊ฑฐ ๋ถ€ํ„ฐ ํ’€์ž..
  • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์ข€ ์–ด๋ ค์šด ๊ฒŒ ์žˆ์—ˆ์Œ.

Pyro

  • CS ๊ณต๋ถ€ํ•˜๋˜ ๊ฑฐ๋ž‘ ์•„์ดํ…œ์ด ์ข€ ๊ฒน์ณ์„œ ์ข‹์•˜์Œ.

Roach

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, ์ด๋ฒˆ์ฃผ ์•„์ดํ…œ์ด๋ž‘ ๊ฒน์ณ์„œ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋ฐ›์€ ๋“ฏ.
  • Database ๊ธฐ์ดˆ ๊ณต๋ถ€์ค‘
  • CS 5์ฃผ์•ˆ์— ๊ธฐ์ดˆ ์ •๋ฆฌ.

Items

item46

  • Side effect๊ฐ€ ์—†๋‹ค.
    • ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋กœ ์ธํ•ด์„œ, ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋˜ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉด ์•ˆ๋œ๋‹ค.
    • ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํด๋กœ์ € ์จ๋ผ
    • ๊ทธ๊ฒƒ ๋ณด๋‹ค๋Š” ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜, ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ถ€ ๋ณ€์ˆ˜๊ฐ€ ๋ถˆ๋ณ€์ด์–ด์•ผ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์—†์„ ๊ฒƒ
  • Side effect๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•?
    1. ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ Immutable
    2. ์ƒํƒœ๊ฐ€ ์•„์˜ˆ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜
  • Pure Function ์ˆœ์ˆ˜ ํ•จ์ˆ˜
    • ๊ทธ๋ ‡์ง€๋งŒ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋งŒ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค
  • Closure
    function counter() {
        let count == 0;
        
        function realCounter() {
            return ++count;
        }
        return realCounter();
    }
    
    • realCounter๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
    • ์ด ํ•จ์ˆ˜๋ฅผ ๊ฐ์‹ธ๋Š” counter() ํด๋กœ์ €๋กœ ๊ฐ์‹ธ๋ฉด, ์ด counter()๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ด๋‹ค.
    • ํด๋กœ์ €๋Š” ํ•จ์ˆ˜๋ฅผ ์ผ์ปซ๋Š” ๊ฒŒ ์•„๋‹˜.
  • enclosure
  • ํ•˜์Šค์ผˆ

item47

  • ๋น„์–ด์žˆ๋Š” ๋ถ€๋ถ„์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•ด์ค˜์•ผํ• ๊นŒ?
  • AbstractList์— get์„ ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด, Iterator๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • Generator
    • ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์„ ํ•˜์ง€ ์•Š๊ณ , ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ
  • ๋น„ํŠธ ์—ฐ์‚ฐ
  • AbstractList๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด Generator ๊ฐ™์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ค‘์š”ํ•œ ์ .
  • Intellij command -> Go to...๋ฅผ ์ด์šฉ

item48

  • ForkJoinPool
    • static commonPool() , ์ž๋ฐ” ์‹œ์ž‘๋  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์นœ๊ตฌ์ž„.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ‘๋ ฌ์ ์ธ ์—ฐ์‚ฐ์„ ํ• ๋•Œ ์ด pool์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•จ.

item49

  • assertํ•˜๋Š” ๊ฒƒ์€ export ํ•˜์ง€ ์•Š๋Š” unpublicํ•œ library์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.
  • spring ์—์„œ ์ œ๊ณตํ•˜๋Š” @valid๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

item50

  • setter์— ๋Œ€ํ•œ ์‚ฌ์šฉ์„ ์ฃผ์˜ํ•ด์•ผํ•  ๋“ฏ.
  • ๊ณต๊ฒฉ์„ ๋„๋Œ€์ฒด ๋ˆ„๊ฐ€ํ•˜๋Š” ๊ฑฐ๋ƒ?
    • ์™ธ๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ณต๊ฒฉ๋ณด๋‹ค๋Š”,
    • ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด, ๋‹ค๋ฅธ ํŒ€์›์ด ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ...
  • item39
    • reflection์„ ์ด์šฉํ•œ ๋ถ€๋ถ„.

๋งˆ๋ฌด๋ฆฌ

  • ๋‹ค์Œ์ฃผ ์ง„ํ–‰์€ David