-
JAVA 8 : OptionalJAVA 2021. 3. 18. 00:22๋ฐ์ํ
๋ฉ์๋์์ ์์ ์ค ๊ฐ์ ์ ๋๋ก ๋ฆฌํดํ ์ ์๋ ๊ฒฝ์ฐ ์ ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ด๋ค๊ฒ์ด ์์๊น?
- ์์ธ๋ฅผ ๋์ง๋ค. (๋น์ธ๋ค, ์คํํธ๋ ์ด์ค๋ฅผ ์ฐ์ด๋๊ธฐ ๋๋ฌธ)
- null์ ๋ฆฌํดํ๋ค. (๋น์ฉ ๋ฌธ์ ๋ ์์ง๋ง ๊ทธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์ฃผ์ํด์ผ ํจ)
null ์ฒ๋ฆฌ ์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๊ฐ์ง๋
- ๋ฐํ์ ์ NPE(NullPointerException)๋ผ๋ ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ ,
- NPE๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํด ๋ค์ด๊ฐ null์ฒดํฌ ๋ก์ง์ด ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ๋จ์ด๋จ๋ฆฐ๋ค๋ ์ ์ด๋ค.
์ด๋ฅผ ์ํด Optional์ด ๋ฑ์ฅํ๋ค.
Optional์ด๋ ?
์กด์ฌํ ์๋ ์์ง๋ง ์ ํ ์๋ ์๋ ๊ฐ์ฒด๋ก null์ด ๋ ์๋ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๊ณ ์๋ ์ผ์ข ์ ๋ํผ ํด๋์ค์ด๋ค.
null ์ฒดํฌ๋ฅผ ๊น๋นกํ๊ฑฐ๋ null์ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ NullPointerException ๋ฐฉ์งํ๊ธฐ ์ํด ์๊ฒจ๋ฌ๋ค.
Optional์ ๋ฆฌํดํ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ์๊ฒ ์ฝ๋๊ฐ ๋ช ์์ ์ผ๋ก ๋น ๊ฐ์ผ์๋ ์๋ค๋ ๊ฑธ ์๋ ค์ฃผ๊ณ , ๋น ๊ฐ์ผ ๊ฒฝ์ฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฃผ์์ฌํญ
- ๋ฌธ๋ฒ์ ์ผ๋ก ์ ํ์ ์์ง๋ง, return ํ์ ์ผ๋ก ์ฐ๋ ๊ฒ๋ง์ด ๊ถ์ฅ ์ฌํญ์ด๋ค.
- ๋ฉ์๋ ๋งค๊ฐ๋ณ์ ํ์ , ๋งต์ ํค ํ์ , ์ธ์คํด์ค ํ๋ ํ์ ์ผ๋ก ์ฐ์ง ๋ง์.
- Optional์ returnํ๋ ๋ฉ์๋์์ null์ returnํ์ง ๋ง์.
- ํ๋ฆฌ๋ฏธํฐ๋ธ ํ์ ์ฉ Optional์ ๋ฐ๋ก ์๋ค. (OptionalInt, OptionalLong..)
- Collection, Map, Stream Array, Optional์ Optional๋ก ๊ฐ์ธ์ง ๋ง ๊ฒ.
(์ด๊ฒ๋ค์ ๊ทธ ์์ฒด๋ก ์ด๋ฏธ ๋น์ด์๋ค๋ ๊ฑธ ํ๋จํ ์ ์๋ ์ปจํ ์ด๋ ์ฑ๊ฒฉ์ ์ธ์คํด์ค๊ธฐ์ Optional๋ก ๊ฐ์ธ๊ฒ ๋๋ฉด ๋๋ฒ ๊ฐ์ธ๊ฒ ๋๋ฏ๋ก ๊ทธ๋ด ํ์๊ฐ ์์)
Optional ๊ฐ์ฒด ์์ฑํ๊ธฐ
Optional ํด๋์ค๋ ๊ฐ์ฒด ์์ฑ์ ์ํด ์ธ๊ฐ์ง ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
- Optional.empty()
null์ ๋ด๊ณ ์๋, ์ฆ ๋น์ด์๋ Optioanl ๊ฐ์ฒด๋ฅผ ์ป์ด์จ๋ค.
์ด ๋น์ด์๋ ๊ฐ์ฒด๋ Optional ๋ด๋ถ์ ์ผ๋ก ๋ฏธ๋ฆฌ ์์ฑํด๋์ ์ฑ๊ธํค ์ธ์คํด์ค์ด๋ค. - Optional.of(value)
null์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋ด๊ณ ์๋ Optional ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
null์ด ๋์ด์ฌ ๊ฒฝ์ฐ NPE๋ฅผ ๋์ง๊ธฐ ๋๋ฌธ์ ์ ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค. - Optional.ofNullable()
null์ธ์ง ์๋์ง ํ์ ํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ด๊ณ ์๋ Optional ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
null์ด ๋์ด์ฌ ๊ฒฝ์ฐ NPE๋ฅผ ๋์ง์ง ์๊ณ Optional.empty()์ ๋์ผํ๊ฒ ๋น์ด์๋ Optional ๊ฐ์ฒด๋ฅผ ์ป์ด์จ๋ค.
ํด๋น ๊ฐ์ฒด๊ฐ null์ธ์ง ์๋์ง ํ์คํ์ง ์์ ์ํ์์๋ ์ด ๋ฉ์๋ฅด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
Optional์ ๊ฐ์ด ์๋์ง ์๋์ง ํ์ธํ๊ธฐ
- isPresent()
๊ฐ์ฒด ์กด์ฌ ์ฌ๋ถ๋ฅผ boolํ์ ์ผ๋ก ๋ฐํํ๋ ๋ฉ์๋์ด๋ค. - isEmpty() (Java 11๋ถํฐ ์ ๊ณต)
Optional์ ์๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
Optional์ด ๋ด๊ณ ์๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ๋ ๋์ผํ๊ฒ ํด๋น ๊ฐ์ ๋ฐํํ์ง๋ง,
Optional์ด ๋น์ด์๋ ๊ฒฝ์ฐ(null์ ๋ด๊ณ ์๋ ๊ฒฝ์ฐ)์๋ ๋ค๋ฅด๊ฒ ์๋ํ๊ฒ ๋๋ค.- get()
๋น์ด์๋ Optional ๊ฐ์ฒด์ ๋ํด์๋ NoSuchElementEsception์ ๋์ง๋ค. - ifPresent(Consumer)
Optional์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์ ๊ทธ ๊ฐ์ ๊ฐ์ง๊ณ ~๋ฅผ ํ๋ผ.
ex) Spring์ผ๋ก ์์ํ๋ ์์ ์ด ์์ผ๋ฉด id๋ฅผ ์ถ๋ ฅํ๋ผ. - orElse(T other)
Optional์ ๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ธ์ค๊ณ ์๋ ๊ฒฝ์ฐ๋ ~๋ฅผ ๋ฆฌํดํ๋ผ.
ex) JPA๋ก ์์ํ๋ ์์ ์ด ์๋ค๋ฉด ๋น์ด์๋ ์์ ์ ๋ฆฌํดํ๋ผ. - orElseGet(Supplier)
Optional์ ๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ธ์ค๊ณ ์๋ ๊ฒฝ์ฐ์ ~~๋ฅผ ํ๋ผ.
ex) JPA๋ก ์์ํ๋ ์์ ์ด ์๋ค๋ฉด ์๋ก ๋ง๋ค์ด์ ๋ฆฌํดํ๋ผ. - orElseThrow()
Optional์ ๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ธ์ค๊ณ ์๋ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋์ ธ๋ผ.
** Optional ๋ต๊ฒ ์ฌ์ฉํ๊ธฐ
Optional์ ๋ค์ด์๋ ๊ฐ ๊ฑธ๋ฌ๋ด๊ธฐ
- Optional filter(Predicate)
Optional์ ๋ค์ด์๋ ๊ฐ ๋ณํํ๊ธฐ
- Optional map(Function)
- Optional flatMap(Function)
Optional ์์ ๋ค์ด์๋ ์ธ์คํด์ค๊ฐ Optional์ธ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
์ฐธ๊ณ
๋ฐ์ํ'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ JAVA ] Object Mapper : json ์ง๋ ฌํ, ์ญ์ง๋ ฌํ ์ฌ์ฉ๋ฒ (0) 2022.03.17 [ JAVA ] ์ง๋ ฌํ Serializable , ์ญ์ง๋ ฌํ Deserialize (0) 2022.03.17 JAVA 8 : Date์ Time (0) 2021.03.21