Skip to content

Latest commit

ย 

History

History
47 lines (34 loc) ยท 2.75 KB

Item_54._use_optional_judiciously.md

File metadata and controls

47 lines (34 loc) ยท 2.75 KB

Item 55. ์˜ต์…”๋„ ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํžˆ ํ•˜๋ผ

๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์˜ ๋Œ€์‘

Java 8 ์ด์ „

  • null์„ ๋ฐ˜ํ™˜
  • ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ

Java 8 ์ด์ „ - null์„ ๋ฐ˜ํ™˜

  • Item 54์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ ํด๋ผ์ด์–ธํŠธ์—์„œ null์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋นผ๋จน๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” NullPointerException ๋ฌธ์ œ๋‚˜ ๊ฐ€๋…์„ฑ ์ €ํ•˜ ์ด์Šˆ๊ฐ€ ์กด์žฌ

Java 8 ์ด์ „ - ์˜ˆ์™ธ๋ฅผ ๋˜์ง

  • ์‹ค์ œ ์˜ˆ์™ธ ์ƒํ™ฉ์ด ์•„๋‹˜์—๋„ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ฒŒ ๋จ
    • ์˜ˆ์™ธ๋Š” ์ง„์งœ ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • ์˜ˆ์™ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ๋„ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์Œ
    • ํ•ด๋‹น ์‹œ์ ์˜ Stack Trace(์Šคํƒ ์ถ”์ ) ์ „์ฒด๋ฅผ ์บก์ฒ˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ ์ƒ์„ฑ ๋น„์šฉ์€ ๋งŒ๋งŒ์น˜ ์•Š์Œ

Java 8์—์„œ ๋“ฑ์žฅํ•œ Optional

  • Tํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ์†Œ์œ ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
  • ๋ณดํ†ต T๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ํŠน์ • ์กฐ๊ฑด์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Optional์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
    • Optional.empty()๋ฅผ ํ†ตํ•ด ๋นˆ Optional ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ˜ํ™˜ ํƒ€์ž…์„ Optional๋กœ ๋ช…์‹œํ•จ์œผ๋กœ์จ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Œ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Œ
    • ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ฒŒ ๋จ
  • Optional์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์ ˆ๋Œ€ null์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์•ˆ ๋จ
    • Optional ์ž์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ NullPointerException์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ, ์ด๋Š” Optional์˜ ์ทจ์ง€์— ๋ฐ˜ํ•˜๋Š” ํ–‰์œ„

Optional์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•  ๋•Œ

  • ๊ฒฐ๊ณผ๊ฐ’์ด ์—†์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•  ๋•Œ

Optional์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ

  • ์ปฌ๋ ‰์…˜, ์ŠคํŠธ๋ฆผ, ๋ฐฐ์—ด, ๊ฐ™์€ ์˜ต์…”๋„ ํƒ€์ž…์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ
    • ์ปฌ๋ ‰์…˜/์ŠคํŠธ๋ฆผ/๋ฐฐ์—ด์€ ์˜ต์…”๋„์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋นˆ ์ปฌ๋ ‰์…˜/์ŠคํŠธ๋ฆผ/๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜
    • ์˜ต์…”๋„์€ ๊ทธ ์ž์ฒด๋กœ ์˜ต์…”๋„์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
  • ๋ฐ•์‹ฑ๋œ ์ฃผ์š” primitive type(int, long, double)์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ
    • ๋ฐ•์‹ฑ+์˜ต์…”๋„์€ ๊ฐ’์„ ๋‘ ๋ฒˆ ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด ๋˜๋ฏ€๋กœ primitive type์„ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ๋ฌด๊ฑฐ์›Œ์ง
    • ๋Œ€์‹  OptionalInt, OptionalLong, OptionalDouble์„ ์‚ฌ์šฉํ•ด ํ•œ ๋ฒˆ๋งŒ ๊ฐ์Œ€ ์ˆ˜ ์žˆ์Œ
  • Map์˜ value๋กœ ์‚ฌ์šฉ
    • Map์˜ value์˜ ์กด์žฌ ์—ฌ๋ถ€๋Š” key์˜ ์กด์žฌ ์—ฌ๋ถ€๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
      • map.contains(key)๋ฅผ ํ†ตํ•ด ์กด์žฌ ์—ฌ๋ถ€ ํŒ๋ณ„
    • ๋งŒ์•ฝ value๋กœ Optional์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์ด 2๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋” ๋ณต์žกํ•ด์ง
  • ์˜ต์…”๋„์€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡์ง€ ์•Š๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฌด๊ฒ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์—ฌ, ์ ์žฌ์ ์†Œ์— ์ž˜ ํ™œ์šฉํ•ด์•ผ ํ•จ