jongheonleee / effective_java

The source code from the third edition of Effective Java, with minor additions as necessary to make it runnable.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐Ÿš€ Effective Java

๐Ÿ“Œ 02. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด



๐Ÿ“ฆ Item 01. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ

๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ new ์ƒ์„ฑ์ž()๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘, ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ํ™œ์šฉํ•˜์—ฌ ์ž์› ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ, ๊ฐ์ฒด ์ ๊ทน์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ

  • ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ : static ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์˜๋ฏธ

  • new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์€ ์ž์›์„ ๋‚ญ๋น„ํ•จ, new ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด heap์˜์—ญ์— ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ™•๋ณด๋จ

  • ๋”ฐ๋ผ์„œ, ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

  • ์žฅ์ 

    • (1) ์ด๋ฆ„์„ ๊ฐ–์Œ - ๋ฉ”์„œ๋“œ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
    • (2) ์ธ์Šคํ„ด์Šค ์žฌ์‚ฌ์šฉ - ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ƒ์„ฑํ•  ํ•„์š” ์—†์ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ(flyweight ํŒจํ„ด)
    • (3) ๋‹คํ˜•์„ฑ, ๊ณต๋ณ€์ด ๊ฐ€๋Šฅํ•จ - ๋ฐ˜ํ™˜ํ•  ํด๋ž˜์Šค๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒ ๊ฐ€๋Šฅ. ์˜ˆ๋ฅผ ๋“ค์–ด, Car car = CarFactory.getInstance("sportCar");
    • (4) ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ์ฒด ๋ฐ˜ํ™˜ - CarFactory.getInstance("truck"), CarFactory.getInstance("sportCar"), ...
    • (5) ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ๋ฐ˜ํ™˜ ๊ฐ์ฒด ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„๋„๋จ - Future ํŒจํ„ด๊ณผ ์œ ์‚ฌ(๋นˆ ๋ฐ•์Šค์ œ๊ณต)
  • ๋‹จ์ 

    • (1) ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ - ์ƒ์„ฑ์ž๊ฐ€ private ์ด๊ธฐ ๋•Œ๋ฌธ
    • (2) ๋ฉ”์„œ๋“œ ์ฐพ๊ธฐ ์–ด๋ ค์›€ - ์ด๋ฆ„์ด ์—ฌ๋Ÿฌ๊ฐœ์ž„

๐Ÿ“ฆ Item 02. ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ

iv๊ฐ€ ๋งŽ๊ณ  ๊ฐ์ฒด ์ƒ์„ฑ์‹œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ, ์ƒ์„ฑ์ž๋‚˜ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ณด๋‹จ ๋นŒ๋” ํŒจํ„ด์„ ํ™œ์šฉ

  • ๋นŒ๋” ํŒจํ„ด : "์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์Œ -> ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋”ฉ ๋งŽ์ดํ•จ, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆœ์„œ ํ˜ผ๋™" ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋นŒ๋” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ด์„œ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ

๐Ÿ“ฆ Item 03. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ

์—ด๊ฑฐํ˜•์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ข‹์Œ

  • ์‹ฑ๊ธ€ํ†ค : ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๊ณ  ๊ณต์œ 
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ• - (1) public static final -> (2) ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ -> (3) ์—ด๊ฑฐํ˜•

๐Ÿ“ฆ Item 04. ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

private ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šคํ™” ๋ง‰์Œ

  • ๊ตณ์ด ์ด๋ ‡๊ฒŒ ๊นŒ์ง€ ํ•  ํ•„์š”๋Š” ์—†์Œ, ๋ฌผ๋ก  ์‹ฑ๊ธ€ํ†ค๊ฐ™์€ ๋””์ž์ธ ํŒจํ„ด์—๋Š” ์ ์šฉํ•ด์•ผํ•จ

๐Ÿ“ฆ Item 05. ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์‹œ ํ•„์š”ํ•œ ์ž์›์„ ๋„˜๊ฒจ์คŒ, ๋ฉ”์„œ๋“œ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜๋„ ์žˆ์Œ(sort("๋น„๊ต๋Œ€์ƒ", "๋น„๊ต๊ธฐ์ค€"))

  • ์ „๋žต ํŒจํ„ด, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์™ธ๋ถ€์—์„œ ํ†ต์งธ๋กœ ๋„ฃ์–ด์คŒ
  • ์˜ˆ์‹œ์—์„œ ๋‚˜์˜จ ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๊ธฐ์˜ ๋ฌธ์ œ์ ์€ "์ž์ฃผ ๋ณ€๊ฒฝ๋  ๋ถ€๋ถ„์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Œ"
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ธ์–ด๋งˆ๋‹ค ๋งž์ถค๋ฒ•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ถ€๋ถ„์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•จ(์ „๋žต ํŒจํ„ด)

๐Ÿ“ฆ Item 06. ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋Š” ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž

  • ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ๋„ ๊ณ ๋ คํ•ด์•ผํ•จ
  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ผ๋Š” ์˜๋ฏธ๋Š” ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋ƒ๋„ ํฌํ•จ์ž„
  • ์ฆ‰, ๋‚ด๋ถ€ iv๊ฐ€ ๋ถˆ๋ณ€์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ๋˜ํ•œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋˜์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์— ํ˜ผ๋™์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์ž‡์Œ

๐Ÿ“ฆ Item 07. ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ!

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ํšŒ์ˆ˜ํ•˜์ง€๋งŒ, 100% ํšŒ์ˆ˜ํ•ด์ฃผ์ง€ ์•Š์Œ
  • ์ฐธ์กฐ๊ฐ€ ๊ฑธ๋ ค์žˆ์ง€๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ํšŒ์ˆ˜ํ•˜์ง€ ๋ชปํ•จ
    • ๋Œ€ํ‘œ์ ์œผ๋กœ Flyweight ํŒจํ„ด์—์„œ ๋งต์— ์ €์žฅ๋œ ์•ˆ์“ฐ๋Š” ๊ฐ์ฒด ํšŒ์ˆ˜ ๋ชปํ•จ
  • ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•ด์•ผํ•จ

๐Ÿ“ฆ Item 08. finalizer์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ


๐Ÿ“ฆ Item 09. try-finally ๋ณด๋‹ค๋Š” try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ผ


๐Ÿ“Œ 03. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ



๐Ÿ“ฆ Item 10. equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ

  • ํ•ต์‹ฌ์€ "๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•ด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ equals() ๊ทœ์•ฝ์„ ๋งŒ์กฑ์‹œํ‚ฌ ๋ฐฉ๋ฒ•์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค."

  • equals()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ์ƒํ™ฉ

    • (1) ๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๊ณ ์œ ํ•จ : ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐธ์กฐ ๋น„๊ต๊ฐ€ ์ •์ƒ์ž„
    • (2) ์ธ์Šคํ„ด์Šค์˜ '๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ'์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†์Œ : ๊ฐ’ ๋น„๊ต(๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ)๋ฅผ ์˜๋ฏธํ•จ
    • (3) ์กฐ์ƒ์—์„œ ์žฌ์ •์˜ํ•œ equals()๊ฐ€ ์ž์†์—์„œ๋„ ๋”ฑ ๋“ค์–ด๋งž๋Š”๋‹ค
      • ์กฐ์ƒ, ์ž์†์€ iv์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ๋‹ค๋ฆ„
      • ์ž์†์—์„œ iv๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  equals()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
        • ๋™์น˜๊ด€๊ณ„(๋นˆ์‚ฌ์„ฑ, ๋Œ€์นญ์„ฑ, ์ถ”์ด์„ฑ, ์ผ๊ด€์„ฑ, null-์•„๋‹˜) ์ถฉ์กฑ ๋ชปํ•จ

  • ์–‘์งˆ์˜ equals()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™
    • (1) == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ์ด ์ž๊ธฐ ์ž์‹ ์ธ์ง€ ํ™•์ธ
    • (2) instanceof ๋ฅผ ํ†ตํ•ด ํƒ€์ž… ํ™•์ธ
    • (3) ๋Œ€์‘๋˜๋Š” 'ํ•ต์‹ฌ' ํ•„๋“œ๋“ค์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š”์ง€ ํ•˜๋‚˜์”ฉ ํ™•์ธ
    • (4) ๋Œ€์นญ์ ? ์ถ”์ด์„ฑ? ์ผ๊ด€์ ? ์Šค์Šค๋กœ ์ž๋ฌธ

๐Ÿ“ฆ Item 11. equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ

  • ํ•ต์‹ฌ์€ "equals()๋ฅผ ์žฌ์ •์˜ํ•œ ํด๋ž˜์Šค ๋ชจ๋‘ hashCode๋ฅผ ์žฌ์ •์˜ํ•ด์•ผํ•จ"
  • ๊ฐ™์€ ๊ฐ์ฒด๋Š” ๊ฐ™์€ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ํ•ด์‹œ์ฝ”๋“œ(hashCode) : ๋””์ง€ํ„ธ ์ง€๋ฌธ, ๋””์ง€ํ„ธ ์ฆ๊ฑฐ์šฉ์œผ๋กœ์„œ ๋งŽ์ด ์‚ฌ์šฉํ•จ, ํŒŒ์ผ์„ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋””์ง€ํ„ธ ์ง€๋ฌธ์ด ๋ณ€๊ฒฝ๋จ
  • ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ํ•ด์‹œ ๊ฐ’์„ ๋งค๋ฒˆ ๊ณ„์‚ฐํ•  ํ•„์š” ์—†์Œ
    • ํ•œ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜๊ณ  ์ €์žฅ ํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜
    • ํ•ด์‹œ๊ฐ’์€ ๋ถˆ๋ณ€
  • hashCode() ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ, ์Šค๋ ˆ๋“œ ์•ˆ์ •์„ฑ๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผํ•จ

๐Ÿ“ฆ Item 12. toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ, ํด๋ž˜์Šค_์ด๋ฆ„@16์ง„์ˆ˜_ํ•ด์‹œ์ฝ”๋“œ
  • ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ toString์„ ์žฌ์ •์˜, ๊ทธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์ฃผ์š” ์ •๋ณด ๋ชจ๋‘ ๋ฐ˜ํ™˜
    • ๋””๋ฒ„๊น… ์šฉ์ด
    • ๊ฐ์ฒด ์ •๋ณด ํŒŒ์•… ์šฉ์ด

๐Ÿ“ฆ Item 13. clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ํ•˜๋ผ

  • Cloneable ์ธํผํ…Œ์ด์Šค, clone ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค ์ž„์„ ์˜๋ฏธ
  • clone์€ ์›๋ณธ ๊ฐ์ฒด์— ์˜ํ–ฅ x, ๋ณต์ œ๋œ ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์‹์„ ๋ณด์žฅํ•ด์•ผํ•จ
  • ์ฃผ์˜ํ•  ์ 
    • ๊นŠ์€ ๋ณต์‚ฌ vs ์–•์€ ๋ณต์‚ฌ
    • ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ
  • ๋ณต์‚ฌ ์ƒ์„ฑ์ž, ๋ณต์‚ฌ ํŒฉํ„ฐ๋ฆฌ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ
  • ์™ ๋งŒํ•˜๋ฉด "๋ณต์ œ ๊ธฐ๋Šฅ์€ ์ƒ์„ฑ์ž์™€ ํŒฉํ„ฐ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒŒ ์ข‹์Œ"

๐Ÿ“ฆ Item 14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ คํ•˜๋ผ

  • ๊ธฐ๋ณธ ๋น„๊ต ๊ธฐ์ค€, ๊ธฐ๋ณธ ๋น„๊ต ๊ธฐ์ค€ ์ด์™ธ Comparator๋กœ ๊ตฌํ˜„
  • ๋™์น˜์„ฑ + ์ˆœ์„œ ๋น„๊ต, ๊ฐ์ฒด์˜ ์ˆœ์„œ ๋น„๊ต
  • ๋ฐ˜์‚ฌ์„ฑ, ๋Œ€์นญ์„ฑ, ์ถ”์ด์„ฑ ์ถฉ์กฑ
  • <์™€ >๋Š” ์ถ”์ฒœํ•˜์ง€ ์•Š์Œ, == ๊ณผ compareTo() ํ™œ์šฉ

About

The source code from the third edition of Effective Java, with minor additions as necessary to make it runnable.


Languages

Language:Java 100.0%