Optional

Optional์ด๋ž€?

Optional<T>๋Š” null์ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๊ฐ์‹ธ๋Š” Wrapper ํด๋ž˜์Šค.

Java 8 ์—์„œ ๋„์ž… ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ์ข… ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด Null์— ๋Œ€์‘ํ•œ๋‹ค.

Optional์€ null ๋˜๋Š” ์‹ค์ œ ๊ฐ’์„ wrapper๋กœ ๊ฐ์‹ธ์„œ NPE(NullPointerException)๋กœ๋ถ€ํ„ฐ ์ž์œ ๋กœ์›Œ์ง€๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ Wrapper ํด๋ž˜์Šค์ด๋‹ค.

Optional์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ์ ˆ๋Œ€ null์„ ๊ฐ–๋Š” value๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ๋˜ํ•œ Optional์€ ๊ฐ’์„ Wrappingํ•˜๊ณ  ํ’€๊ณ , null์ผ ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ ๋Œ€์ฒ˜ ๊ณผ์ •์—์„œ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, Optional์€ ๋ฉ”์†Œ๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ€ null์ด ๋ฐ˜๋“œ์‹œ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.

Optional ๋‹จ์ 

  • ์ฝ”๋“œ๋Š” ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ์ €ํ•˜๋œ๋‹ค.

  • ๋‹จ์ˆœ null ์ฒดํฌ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๊ฐ€ ๊ฝค ํฌ๋‹ค.

  • Optional ์ด ์‚ฌ์šฉ๋œ ์•ฝ 95% ์ด์ƒ์˜ ์ฝ”๋“œ์—์„œ์˜ ์‚ฌ์šฉ์€ ๋ฌด์˜๋ฏธํ•˜๊ฑฐ๋‚˜ ์†์‹ค์ด ๋” ํฌ๋‹ค.

  • ์—ฌ์ „ํžˆ Optional ๊ด€๋ จ method๋Š” ๋ฐœ์ „ ์ค‘์ด๋ฉฐ, ์ •๋ˆ๋˜์ง€ ์•Š์•˜๋‹ค.

Optional ๊ฐ์ฒด ์ƒ์„ฑ

Optional.of (java8)

value๊ฐ€ null์ธ ๊ฒฝ์šฐ NPE ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค

Optional.ofNullable (java8)

value๊ฐ€ null์ธ ๊ฒฝ์šฐ ๋น„์–ด์žˆ๋Š” Optional์„ ๋ฐ˜ํ™˜

Optional.empty (java8)

๋น„์–ด์žˆ๋Š” ์˜ต์…”๋„ ๊ฐ์ฒด ์ƒ์„ฑ

Optional ์ค‘๊ฐ„

filter (java8)

predicate ๊ฐ’์ด ์ฐธ์ธ ๊ฒฝ์šฐ ํ•„ํ„ฐ๋ฅผ ํ†ต๊ณผ

map (java8)

mapper ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜

flatMap (java8)

mapper ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜. map() ๋ฉ”์„œ๋“œ์™€ ๋‹ค๋ฅธ์ ์€ ๋ฐ˜ํ™˜ ๊ฐ’์ด Optional์ด๋‹ค.

or (java9)

๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ์—ฐ์‚ฐ ์ค‘ ๋น„์–ด์žˆ๋Š” ์˜ต์…”๋„์ด ๋œ๋‹ค๋ฉด, ๋‹ค์Œ or() ๋ฉ”์„œ๋“œ ์ง„ํ–‰

stream (java9)

stream ๊ฐ์ฒด๋กœ ์ „ํ™˜์ด ๊ฐ€๋Šฅ.

Optional ์ข…๋‹จ

ifPresent (java8)

์—ฐ์‚ฐ์„ ๋๋‚ธ ํ›„ ๊ฐ’์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‹คํ–‰

๋งŒ์•ฝ ๋น„์–ด์žˆ๋Š” ์˜ต์…˜๋„ ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

isPresent (java8)

์ตœ์ข…์ ์œผ๋กœ ์—ฐ์‚ฐ์„ ๋๋‚ธ ๋’ค ๊ฐ์ฒด ์กด์žฌ ์—ฌ๋ถ€ ํŒ๋ณ„ (true/false)

get (java8)

์—ฐ์‚ฐ์ด ๋๋‚œ ํ›„ ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ธ๋‹ค.

๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ.

orElse (java8)

์—ฐ์‚ฐ์ด ๋๋‚œ ๋’ค ํ˜ธ์ถœ

  • ์˜ต์…”๋„ ๊ฐ์ฒด์˜ ๊ฐ’๊ณผ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ํ˜ธ์ถœ

  • ๊ฐ’์ด ๋ฏธ๋ฆฌ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.(ex.unique key์— ๋Œ€ํ•œ ์˜ค๋ฅ˜)

orElseGet (java8)

์—ฐ์‚ฐ์ด ๋๋‚œ ๋’ค์—๋„ ์˜ต์…”๋„ ๊ฐ์ฒด๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•  Supplier(๋น„์ง€๋‹ˆ์Šค ๋กœ์ง)๋ฅผ ์ง€์ •

  • ์˜ต์…”๋„ ๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ์—๋งŒ ํ˜ธ์ถœ

  • ๊ฐ’์ด ๋ฏธ๋ฆฌ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ.

orElseThrow (java8)

์—ฐ์‚ฐ์ด ๋๋‚œ ๋’ค์—๋„ ์˜ต์…”๋„ ๊ฐ์ฒด๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, ์˜ˆ์™ธ ๋ฐœ์ƒ.

ifpresentOrElse (java9)

๋‘๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„ ์œ ํšจํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š” ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‹คํ–‰.

๊ฐ์ฒด๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‹คํ–‰.

Last updated