[Java] Optional
๐ ๋ค์ด๊ฐ๋ฉฐ
Java๋ฅผ ์ฐ๋ค ๋ณด๋ฉด ๊ฐ์ฅ ์์ฃผ ๋ง๋๋ ์์ธ๊ฐ NullPointerException์ด๋ค. ๊ฐ์ด ์์ ์๋, ์์ ์๋ ์๋ ์ํฉ์ null๋ก ์ง์ ๋ค๋ฃจ๋ฉด ๊ณณ๊ณณ์ if (x != null) ์ฒดํฌ๊ฐ ํฉ์ด์ง๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ฐ์ํ๊ฒ ๋ค๋ฃจ๋๋ก ๋์์ฃผ๋ ๊ฒ์ด Optional์ด๋ค.
Optional์ด๋? ๊ฐ์ด ์กด์ฌํ ์๋, ์์ ์๋ ์๋ ์ปจํ ์ด๋. โ๊ฐ์ด ์์์ง๋ ์์์ง๋ ๋ชจ๋ฅธ๋คโ๋ ์ํฉ์null๋ณด๋ค ๋ช ์์ ์ผ๋ก ํํํ๊ฒ ํด์ค๋ค.
1. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
Optional์ ๊ฐ์ ์ ๋ฌด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ๋ค. orElse๋ก ๊ฐ์ด ์์ ๋์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ ์ ์๋ค.
| ์ํฉ | ์์ฑ | ๊ฒฐ๊ณผ |
|---|---|---|
| ๊ฐ์ด ์์ | Optional.of("Hello") | ์๋ ๊ฐ ๋ฐํ |
| ๊ฐ์ด ์์ | Optional.empty() | ๊ธฐ๋ณธ๊ฐ ๋ฐํ |
1
2
3
4
5
6
7
8
9
// ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
Optional<String> optionalValue = Optional.of("Hello, Optional!");
String result = optionalValue.orElse("Default Value");
System.out.println(result); // ์ถ๋ ฅ: Hello, Optional!
// ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
Optional<String> emptyOptional = Optional.empty();
String result2 = emptyOptional.orElse("Default Value");
System.out.println(result2); // ์ถ๋ ฅ: Default Value
2. ๋ฉ์๋ ์ฒด์ด๋
Optional์ ๋ฉ์๋ ์ฒด์ด๋์ผ๋ก ์ฌ๋ฌ ์์
์ ์ฐ์ ์ํํ ์ ์๋ค. map์ผ๋ก ๊ฐ์ ๋ณํํ๊ณ , orElse๋ก ๋ง๋ฌด๋ฆฌํ๋ค.
1
2
3
4
String result = optionalValue
.map(value -> value + " - Modified")
.orElse("Default Value");
System.out.println(result); // ์ถ๋ ฅ: Hello, Optional! - Modified
3. ์์ธ ์ฒ๋ฆฌ ๊ฐ์ํ
๊ธฐ์กด์๋ null ์ฒดํฌ๋ก ๋ฐฉ์ด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค. Optional์ ์ฐ๋ฉด ์ด ๊ณผ์ ์ด ํ ์ค๋ก ๊น๋ํด์ง๋ค.
1
2
3
4
5
public String getUserName(User user) {
return Optional.ofNullable(user) // user๊ฐ null์ด์ด๋ ์์
.map(User::getName) // null์ด๋ฉด map์ ๊ฑด๋๋
.orElse("Unknown"); // ์ต์ข
์ ์ผ๋ก ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ
}
| ๋ฉ์๋ | ์ญํ |
|---|---|
Optional.of(x) | x๋ฅผ ๊ฐ์ผ Optional (x๊ฐ null์ด๋ฉด ์์ธ) |
Optional.ofNullable(x) | x๊ฐ null์ด๋ฉด empty, ์๋๋ฉด ๊ฐ์ |
Optional.empty() | ๋น Optional |
map(f) | ๊ฐ์ด ์์ผ๋ฉด ๋ณํ, ์์ผ๋ฉด ๊ทธ๋๋ก empty |
orElse(๊ธฐ๋ณธ๊ฐ) | ๊ฐ์ด ์์ ๋ ๋ฐํํ ๊ธฐ๋ณธ๊ฐ |
โ ๏ธ ์ฃผ์ํ ์
Optional์ ๋ฌด๋ถ๋ณํ๊ฒ ์ฐ๊ธฐ๋ณด๋ค ์ํฉ์ ๋ง๊ฒ ์จ์ผ ํ๋ค. ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ฏ๋ก ์ ์คํ๊ฒ ์ ํํ์. (์: ํ๋ ํ์ ์ด๋ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ก ๋จ๋ฐํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์๋๋ค.)
๐ ์ ๋ฆฌ
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| Optional | ๊ฐ์ ์ ๋ฌด๋ฅผ ๋ช ์์ ์ผ๋ก ํํํ๋ ์ปจํ ์ด๋ |
| orElse | ๊ฐ์ด ์์ ๋์ ๊ธฐ๋ณธ๊ฐ |
| map ์ฒด์ด๋ | null ์ฒดํฌ ์์ด ๊ฐ ๋ณํ์ ์ฐ์ ์ํ |
| ofNullable | null ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฐ์ ์์ ํ๊ฒ ๊ฐ์ธ๊ธฐ |
Optional์ null์ ์ง์ ๋ค๋ฃจ๋ ๋์ โ๊ฐ์ด ์์ ์ ์์โ์ ํ์
์ผ๋ก ๋๋ฌ๋ด๋ ๋๊ตฌ๋ค. ๋๋ถ์ NullPointerException์ ์ค์ด๊ณ ์ฝ๋ ์๋๋ฅผ ๋ช
ํํ๊ฒ ํํํ ์ ์๋ค.
Comments powered by Disqus.