Optional์ ๋ฐ๋ก ๊ณต๋ถํ ์ ์ด ์์ด์ ๋์ถฉ ์ค๋ฅ๋ง ๋ดค์ ๋ ์ฌํ๊ป isPresent์ด๋ ifPresent๊ฐ ๊ฐ์ ์ ์ธ์ค ์์๋ค ..
๋ฐ๋ถ ๊ทธ๋์ isPresent()์์ ์ธ์๋ก ์ ๋๋ค์์ ์จ์ฃผ๋์ง ์ดํด๊ฐ์๋๋ค..ํ์ง๋ง ๋ค๋ฅธ ๋ฉ์๋์๋ค๋๊ฒ ใ .. ํฌ์คํธ๊ฐ ๋๋ฌด ์งง์ ์ฃผ์
์ํผ ์ค๋์ Optional์ด ๋ญ์ง ์์ฃผ ์งง๊ฒ ์ดํด๋ณด๊ณ isPresent/ifPresent/ifPresentOrElse ๋ฉ์๋์ ๋ํด ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค.
Optional์ด๋?
์กด์ฌํ ์๋ ์์ง๋ง ์ ํ ์๋ ์๋ ๊ฐ์ฒด,
์ฆ, “null์ด ๋ ์๋ ์๋ ๊ฐ์ฒด”์ ๊ฐ์ธ๊ณ ์๋ ์ผ์ข ์ ๋ํผ ํด๋์ค์ด๋ค.
์์๊ฐ ์๊ฑฐ๋ ์ต๋ ํ๋ ๋ฐ์ ์๋ Collection์ด๋ Stream์ด๋ผ๊ณ ์๊ฐํด๋ ์ข๋ค.
null ๋๋ฌธ์ ์๊ธฐ๋ ๊ท์ฐฎ์์ ํธ๋ค๋งํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค๊ณ ํ๋ค.
ifPresent ๋ฉ์๋
๋์ถฉ ifPresent ์์ action์ ๋ฃ์ด์ฃผ๋ฉด presentํ ๋ ์คํํ๋ค๋ ์๊ธฐ๋ค. ๋ง์ฝ presentํ๋ฐ action์ด ์ ์๋์ด์์ง ์์ผ๋ฉด NullPointerException์ ๋ฐํํ๋ค.
.ifPresent(person -> System.out.println("์ฌ๋ ์กด์ฌํด์ฉ"));
๋์ถฉ person์ด ์กด์ฌํ๋ฉด ์ฌ๋ ์กด์ฌํด์ฉ ์ถ๋ ฅํ๋ ์ฝ๋
๋ด๊ฐ ๊ฐ์์์ ์ดํด ์๋๋ ์ฝ๋๋ ์ด ์๋ ์ฝ๋์ด๋ค. ๊ทธ๋์ ifPresent์ ๋ํด์ ๊ณต๋ถํ๊ฒ๋๋น
memberRepository.findByName(member.getName())
.ifPresent(m->{
throw new IllegalStateException("์
์ด๋ฏธ ์กด์ฌํ๋ ํ์์ใ
");
});
์ด ์ฝ๋๋ฅผ ๋ค์ ํด์ํด๋ณด๋ฉด memberRepository์์ findByName์ผ๋ก ์ด๋ค ์ด๋ฆ์ ๊ฐ์ง Optional<Member>๋ฅผ ๋ฝ์๋ด๊ณ , ๋ง์ฝ์ ๋ฉค๋ฒ๊ฐ ์กด์ฌํ๋ค๋ฉด ifPresent์ ์ํด IllegalStateException์ด throw๋๋ ๊ฒ์ด๋ค. (memberRepository๊ฐ Optional<Member> ์ด๋ผ๊ณ ๊ฐ์ )
ifPresentOrElse ๋ฉ์๋
์๋ ifPresent์ ๊ฑฐ์ ๋น์ทํ๋ฐ ๊ทธ๋ฅ Else์ธ ๊ฒฝ์ฐ๊น์ง ํธ๋ค๋งํด์ฃผ๋ ๋ฉ์๋์ด๋ค.
.ifPresentOrElse(
person -> System.out.println("์ฌ๋ ์์ด์ "),
() -> System.out.println("์ฌ๋ ์์ด์ ")
);
person ์กด์ฌ ํ ๊ฒฝ์ฐ "์ฌ๋ ์์ด์ " ์ถ๋ ฅ, ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ "์ฌ๋ ์์ด์ " ์ถ๋ ฅ
isPresent ๋ฉ์๋
๊ทธ๋ฅ boolean ๋ฐํํ๋ ์ ๋ค. ๋์ด์ ํ ๋ง ์์
์๋ ์ค๋ ์คํ๋ง๋ถํธ ๋จ์๊ฑฐ ์ ๋ก๋ํ๋ ค๊ณ ํ๋๋ฐ ์ค๊ฐ์ ๋ชจ๋ฅด๋ ๊ฐ๋ ์ ๋ฆฌํ๋๊น ๋์ด ์๋จ ์ด์นด์ฅฌ....ใ ใ ใ
References
https://www.daleseo.com/java8-optional-after/
์๋ฐ8 Optional 2๋ถ: null์ ๋ํ๋ ์๋ก์ด ๋ฐฉ๋ฒ
Engineering Blog by Dale Seo
www.daleseo.com
Optional (Java SE 9 & JDK 9 )
If a value is present, returns the result of applying the given Optional-bearing mapping function to the value, otherwise returns an empty Optional. This method is similar to map(Function), but the mapping function is one whose result is already an Optiona
docs.oracle.com
'๐ฉโ๐ป Programming & Algorithm > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] Stream ์ด๋? (0) | 2023.03.14 |
---|