2022. 4. 11. 13:36ใJAVA/study
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 ์์ ๋ค์ด์๋ ์ธ์คํด์ค๊ฐ ๋ ๋ฒ ์ด์ ํ์ด์ผ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ๋ผ ์ ์๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
'JAVA > study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ๋ ์๋ฐ, Java 8 CompletableFuture (0) | 2022.04.11 |
---|---|
[JAVA] ๋ ์๋ฐ, Java 8 Date์ Time API (0) | 2022.04.11 |
[JAVA] ๋ ์๋ฐ, Java 8 Stream (0) | 2022.04.06 |
[JAVA] ๋ ์๋ฐ, Java 8 ์ธํฐํ์ด์ค ๋ณํ (0) | 2022.04.06 |
[JAVA] ๋ ์๋ฐ, Java 8 ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค ํํ์ (0) | 2022.04.06 |