Bibi's DevLog ๐ค๐
[Java] Optional, Optional์ ๋ฉ์๋, Optional ์ฌ์ฉ์ ์ฃผ์์ฌํญ ๋ณธ๋ฌธ
[Java] Optional, Optional์ ๋ฉ์๋, Optional ์ฌ์ฉ์ ์ฃผ์์ฌํญ
๋น๋น bibi 2021. 4. 6. 00:15Optional
Optional ์ต์ ๋ : ''๊ฐ์ฒด''๊ฐ null์ธ์ง ์๋์ง ํ๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
Optional<User> byId = userRepository.findById(id);
โ
User user = userRepository.findById(id).orElseGet(User::new);
๋๋ค๋ฅผ ๋ฉ์๋์ฐธ์กฐ๋ก ๋ฐ๊พธ๊ธฐ
() -> new User()
==User::new
๋๋ค์์ ์ถ์ฝํ ๋ฉ์๋ ์ฐธ์กฐ์?์ด๋ค.
orElseGet()
: null์ผ ๋ ()์์ ์คํํ๋ค. ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ ๋๋ค์์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋คorElseThrow()
: null์ผ ๋ ํด๋น ์์ธ๋ฅผ ๋์ง๋ค.
(๊ฒฐ๊ตญ Optional ์ฌ์ฉํ ๋๋ ํญ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ, ๋๋ค์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.)
โปOptional์ ๋ํ ์ข์ ๊ธ : ์ด๋ ธ ์ถ์ฒ
โป.
์ผ๋ก ๋ฉ์๋์ฒด์ด๋์ ํ๋ ๋ฉ์๋๋ค์ ๋๋ถ๋ถ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฏธ์ 2 ํผ๋๋ฐฑ
Optional
Optional ์ฌ์ฉ๋ฒ์ ๊ฒ์ํ๋ฉด ์์ฒญ ๋ง์ด ๋์ค๋๋ฐ์~ ํ๋๋ง ๊ฐ์ ธ์ ๋ดค์ต๋๋ค.
https://mangkyu.tistory.com/70์ ๊ฐ ์๊ฐํ๋ ํ์ Optional ์ด ์ด๋ค ๋ฉ์๋๊ฐ ์๋์ง . ๋ง ์ฐ์ด๋ IDE์์ ์์ธํ ์๋ ค์คํ ๋ฐ ๋ฉ์๋์ Input, Output ํ์ ์ด ์ด๋ค๊ฑด์ง๋ฅผ ์ ์ดํด๋ณด๋ฉด ๋์์ด ๋ ๊ฒ๋๋ค!
Optional ์์ ๋ฐ๋ก get() ์ ํธ์ถํ์ง ์๋๋ก ํด ์ฃผ์ธ์
Optional ํ์ ์ ๋ฐ์์์ผ๋ orElseThrow ๋ฑ์ผ๋ก ๊ฐ์ด ์์ ๋ ์ฒ๋ฆฌ๋ฅผ ํด ์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค.^^
์ฒ์์๋ ์ฌ์ฉ๋ฒ์ด ์ด๋ ค์ธ ์ ์๋๋ฐ map, flatMap ๋ฑ๋ณด๋ค๋
orElseThrow, ifPresent ์ ๋๋ง ์จ์ ์์๋, ์์๋ ์ฒ๋ฆฌ๋ง ํด๋ณด๋ ๊ฒ์ผ๋ก ์์ํ์ จ์ ํ๋ค์~
[Optional] ๋ฉ์๋
Optional ๋ฉ์๋๋ค ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ.
get()
- ๋น์ด ์๋ Optional ๊ฐ์ฒด๋ฅผ ๋ฐํํจ
empty()
- Optional๊ฐ์ฒด๋ฅผ null๋ก ์ด๊ธฐํํจ
isPresent()
- Optional ๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ด null์ธ์ง ์๋์ง ํ์ธํ๋ค.
orElse()
- ์ ์ฅ๋ ๊ฐ์ด ์กด์ฌํ๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ , ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ฐํํจ
orElseGet()
- ์ ์ฅ๋ ๊ฐ์ด ์กด์ฌํ๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ , ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ํ๋ผ๋ฏธํฐ์ ๋๋ค์ ๊ฒฐ๊ด๊ฐ์ ๋ฐํํจ
orElseThrow()
- ์ ์ฅ๋ ๊ฐ์ด ์กด์ฌํ๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ , ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ํ๋ผ๋ฏธํฐ์ ์์ธ๋ฅผ ๋ฐ์์ํด
Optional ์ฌ์ฉ ์ ์ ์์ฌํญ
isPresent()-get()
๋์orElse()/orElseGet()/orElseThrow()
- ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค
orElse(new ...)
๋์orElseGet(() -> new ...)
orElse(...)
์์...
๋Optional
์ ๊ฐ์ด ์๋ ์๋ ๋ฌด์กฐ๊ฑด ์คํ๋๋ค. ๋ฐ๋ผ์...
๊ฐ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์๋ก์ด ์ฐ์ฐ์ ์ํํ๋ ๊ฒฝ์ฐ์๋orElse()
๋์orElseGet()
์ ์จ์ผํ๋ค.
๋จ์ํ ๊ฐ/null๋ง ์ป์ ๋ชฉ์ ์ด๋ผ๋ฉด Optional ๋์
null
๋น๊ต(!=null
)๋ฅผ ์ฌ์ฉํ๋ค.Optional
๋์ ๋น์ด์๋ ์ปฌ๋ ์ ๋ฐํOptional
์ ํ๋๋ก ์ฌ์ฉ ๊ธ์งOptional
์ ์์ฑ์๋ ๋ฉ์๋ ์ธ์๋ก ์ฌ์ฉ ๊ธ์งOptional
์ ์ปฌ๋ ์ ์ ์์๋ก ์ฌ์ฉ ๊ธ์งof()
,ofNullable()
ํผ๋ ์ฃผ์Optional<T>
๋์OptionalInt
,OptionalLong
,OptionalDouble
'๐ฅ BE ๋ฐฑ์๋ > Java ์๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฏธ์ ํผ๋๋ฐฑ] ๋ฉ์๋&๋ณ์ ๋ค์ด๋ฐ, ์๋ฐ ๋ ์ง/์๊ฐ ํด๋์ค LocalDateTime, import์ ๋ํด (0) | 2021.03.18 |
---|---|
[Java] ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด(๊ธฐ์ด) (0) | 2021.03.02 |
[Java] static import์ static๋ฉ์๋ (0) | 2021.03.02 |
[Java] ์๋ฐ ์์์ ์์ ์ปจ๋ฒค์ / System.exit(0) (0) | 2021.03.02 |
[Java] ๊ฐํ๋ฌธ์, System.getProperty("line.separator") (1) | 2021.02.25 |