[JAVA] Optional
Optional
1. ๊ฐ๋
- ๊ฐ์ ์กด์ฌ์ ๋ฌด๊ฐ ํ์คํ์ง ์์ ๋ ์ฌ์ฉํ๋ ์ปจํ ์ด๋
- NullPointerException ๋ฐฉ์ง
2. ์์ฑ
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
Optional.of(T) |
null์ด ์๋์ด์ผ ํจ, null์ด๋ฉด NPE |
Optional.ofNullable(T) |
null ๊ฐ๋ฅ |
Optional.empty() |
๋น Optional ์์ฑ |
์ฝ๋
Optional<String> opt1 = Optional.of("Hello"); // null์ด ์๋ ๊ฐ
Optional<String> opt2 = Optional.ofNullable(null); // null์ผ ์๋ ์์
Optional<String> opt3 = Optional.empty(); // ๋น์ด ์๋ Optional
3. ๊ฐ ๊บผ๋ด๊ธฐ
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
get() |
๊ฐ ๋ฐํ, ๋น์ด์๋ ๊ฒฝ์ฐ NPE |
4. NPE ์์ด ๊ฐ ๊บผ๋ด๊ธฐ
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
orElse(T) |
๊ธฐ๋ณธ๊ฐ ๋ฐํ |
orElseGet(Supplier) |
์ง์ฐ ๊ณ์ฐ๋ ๊ธฐ๋ณธ๊ฐ ์ ๊ณต |
orElseThrow() |
์์ธ ๋์ง |
์ฝ๋
// ๊ฐ์ด ์์ผ๋ฉด ๋ฐํ, ์์ผ๋ฉด "๊ธฐ๋ณธ๊ฐ"
String name = opt.orElse("์ธ ํค์๋ง");
System.out.println(name);
// ๊ฐ์ด ์์ผ๋ฉด ๋ฐํ, ์์ผ๋ฉด ํจ์ ์คํํด์ ๋ฐํ
String name2 = opt.orElseGet(() -> "์ธ ํค์๋ง" + "์นด๋ผ์ค๋
ธ");
System.out.println(name2);
// ๊ฐ์ด ์์ผ๋ฉด ์์ธ ๋์ง๊ธฐ
String name3 = opt.orElseThrow(() -> new IllegalArgumentException("์์"));
์ธ ํค์๋ง
์ธ ํค์๋ง์นด๋ผ์ค๋
ธ
Exception in thread "main" java.lang.IllegalArgumentException: ์์
at practice.Practice.lambda$12(Practice.java:190)
at java.util.Optional.orElseThrow(Unknown Source)
at practice.Practice.main(Practice.java:190)
5. ๊ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
isPresent |
true - ์กด์ฌ |
isEmpty |
true - ๋ถ์ฌ, java11๋ถํฐ ์ง์ |
์ฝ๋
if (!opt.isPresent()) {
System.out.println("๋น์ด์๊ตฌ๋!");
}
Leave a comment