[JAVA] ๋” ์ž๋ฐ”, Java 8 Optional

2022. 4. 11. 13:36ใ†JAVA/study

728x90

 

1๏ธโƒฃ Optional

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ์ธํ•ด null์„ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜ null ์ฒดํฌ๋ฅผ ๊นœ๋นกํ•ด์„œ NPE(NullPointerExecption)์„ ์ข…์ข… ๋ณด๊ฒŒ ๋œ๋‹ค. 

 

๋ฉ”์†Œ๋“œ์—์„œ ์ž‘์—…ํ•˜๋‹ค๋ณด๋ฉด ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์—์„œ ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋ฆฌํ„ดํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 

์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ฑฐ๋‚˜

, null์„ ๋ฆฌํ„ดํ•ด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ์ฃผ์˜ํ•˜๊ฑฐ๋‚˜, Optional(java8๋ถ€ํ„ฐ!)์„ ๋ฆฌํ„ดํ•œ๋‹ค. 

 

Optional์ด๋ž€?

์˜ค์ง ๊ฐ’ ํ•œ ๊ฐœ๊ฐ€ ๋“ค์–ด์žˆ์„์ˆ˜๋„ ์—†์„์ˆ˜๋„ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ 

 

 

Optional ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ์ 

- Optional์€ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ๋งŒ ์“ฐ๊ธฐ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค. -> ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…, ๋งต์˜ ํ‚ค ํƒ€์ž…, ์ธ์Šคํ„ด์Šค ํ•„๋“œ ํƒ€์ž…์œผ๋กœ ์“ฐ์ง€๋ง๊ธฐ

- Optional์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ์—์„œ null์„ ๋ฆฌํ„ดํ•˜์ง€ ๋ง์ž. 

- Primitive ํƒ€์ž…์šฉ Optional์ด ๋”ฐ๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Optional์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž. -> OotionalInt, OptionalLong...

- Collection, Map, Stream Array, Optional์€ Optional๋กœ ๊ฐ์‹ธ์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค. 

-> Collection Map, Array๋“ฑ์€ ๋”ฐ๋กœ ๋นˆ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Optional๋กœ ๊ฐ์‹ธ๋ฉด ์˜คํžˆ๋ ค ๋‘๋ฒˆ ๊ฐ์‹ธ๋Š”๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!!

 

 

2๏ธโƒฃ Optional API

 

Optional ๋งŒ๋“ค๊ธฐ

- Optional.of() : null์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Optional ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. of()์•ˆ์— ๋“ค์–ด์˜ค๋Š” ๊ฐ’์€ null์ด ์•„๋‹๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. -> null์ด ๋„˜์–ด์˜ฌ ๊ฒฝ์šฐ  NPE ๋ฐœ์ƒ!!! 

- Optional.ofNullable() : null์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Optional ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

- Optional.empty() : null ์„ ๋‹ด๊ณ  ์žˆ๋Š”, ๋น„์–ด์žˆ๋Š” optional ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜จ๋‹ค. 

 

Optional์— ๊ฐ’ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ 

- isPresent() : ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ, ์ €์žฅ๋œ ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜, ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ 

- isEmpty() : ๊ฐ’์ด empty์ธ์ง€ ํ™•์ธ 

 

Optional์— ์žˆ๋Š” ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

- get() : Optional ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” value ๊ฐ’์„ ๊บผ๋‚ด์˜ค๋Š”๋ฐ ์ด๋•Œ ๊ฐ์ฒด์— ๊ฐ’์ด ์—†์œผ๋ฉด NoSuchElementException ์ด ๋ฐœ์ƒํ•œ๋‹ค. 

-> ๋นˆ Optional๊ฐ์ฒด๋ฅผ ๊บผ๋‚ผ ๊ฒฝ์šฐ์—๋Š” NULL ์ฒดํฌ๋ฅผ ๋˜ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

 

- ifPresent(Consumer<T>) 

: Consumer<T> ๋Š” T ํƒ€์ž…์„ ๋ฐ›์•„์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค 

-> Optional์— ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๊ทธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ~~๋ฅผ ํ•˜๋ผ. ์ฆ‰ ifPresent() ๋ฉ”์†Œ๋“œ๋Š” ๋žŒ๋‹ค์‹์„ ์ธ์ž๋กœ ๋ฐ›์•„, ๊ฐ’์ด ์กด์žฌํ•  ๋•Œ ๊ทธ ๊ฐ’์— ๋žŒ๋‹ค์‹์„ ์ ์šฉํ•ด์ฃผ๊ณ , Optional ๊ฐ์ฒด์— ๊ฐ’์ด ์—†๋‹ค๋ฉด ๋žŒ๋‹ค์‹์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

- orElset(T) 

: Optional์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ณ  ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ~~๋ฅผ ๋ฆฌํ„ดํ•˜๋ผ. 

-> JPA๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆ˜์—…์ด ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฆฌํ„ด! 

์ค‘๊ฐ„์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ๋“ค์„ ๊ฑฐ์น˜๋ฉด์„œ ํ˜น์€ ์›๋ž˜ Optional ๊ฐ์ฒด๊ฐ€ ๋น„์–ด์žˆ์—ˆ๋‹ค๋ฉด orElse() ๋ฉ”์†Œ๋“œ์— ์ง€์ •๋œ ๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฆฌํ„ด๋œ๋‹ค. 

 

- orElseGet(Supplier<T>)

: Optional์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ณ  ์—†๋Š” ๊ฒฝ์šฐ ~~๋ฅผ ํ•˜๋ผ. 

-> Supplier<T> : T ํƒ€์ž…์˜ ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค 

 

- orElseThrow()

: Optional์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ณ  ์—†๋Š” ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋˜์ ธ๋ผ 

 

Optional์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ 

Optional filter(Predicate)

 

Optional์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’ ๋ณ€ํ™˜ํ•˜๊ธฐ 

Optional map(Function) 

 

Optional flatMap(Function) 

: Optional ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ Optional์ธ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค -> Optional ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‘ ๋ฒˆ ์ด์ƒ ํ’€์–ด์•ผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„ ๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90