μλ°μμλ μμ νμ
μ μ μΈν λͺ¨λ κ²μ΄ null
μ΄ λ μ μλ€.
λλ¬Έμ νλ‘κ·Έλλ°μ ν λ NullPointerException
μ ννκ² λ§μ£ΌμΉκ² λλλ°, μ λλ‘ μ²λ¦¬νμ§ μμΌλ©΄ νλ‘κ·Έλ¨μ μμ μ±μ΄ λ¨μ΄μ§κ³ , 볡μ‘ν μ½λκ° μ겨λ μ μλ€.
class Example {
public static void main(String[] args) {
// case 1
String str = "abc";
System.out.println(str.toUpperCase()); // ABC
str = null;
System.out.println(str.toUpperCase()); // NullPointerException
// case 2
String str = "abc";
if (str != null) {
System.out.println(str.toUpperCase()); // ABC
} else {
System.out.println("null");
}
}
}
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μλ° 8μμλ Optional
μ λμ
νμ¬ null
μ λ μμ νκ² μ²λ¦¬ν μ μλλ‘ μ§μνλ€.
Optional κ°μ²΄ μμ±
Optional
μ null
μ΄ λ μ μλ κ°μ²΄λ₯Ό κ°μΈλ λνΌ ν΄λμ€λ‘, null
μ΄ λ μ μλ κ°μ²΄λ₯Ό λ΄κ³ μλ Optional
κ°μ²΄λ₯Ό μμ±ν μ μλ€.
class Example {
public static void main(String[] args) {
Map<String, String> map = Map.of("existKey", "existValue");
Optional<String> opt1 = Optional.of(map.get("existKey"));
Optional<String> opt2 = Optional.ofNullable(map.get("notExistKey"));
Optional<String> opt3 = Optional.empty();
}
}
μ
λ ₯ κ°μ΄ null
μΌ λ
μ
λ ₯ κ°μ΄ null
μ΄ μλ λ
NullPointerException
λ°μ
Optional
κ°μ²΄ μμ± (κ°μ λ΄κ³ μμ)
Optional.ofNullable(T value)
Optional
κ°μ²΄ μμ± (κ°μ λ΄κ³ μμ)
-(null
μ λ΄κ³ μλ Optional
κ°μ²΄ μμ±
-(null
μ λ΄κ³ μλ Optional
κ°μ²΄ μμ±
Optional κ°μ²΄ μ‘°ν
Optional
κ°μ²΄μ λ΄κΈ΄ κ°μ κ°μ Έμ€κΈ° μν΄μλ κΈ°λ³Έμ μΌλ‘ get()
λ©μλλ₯Ό μ¬μ©ν΄μ κ°μ Έμ¬ μ μλ€.
class Example {
public static void main(String[] args) {
Optional<String> opt = Optional.of("abc");
String str = opt.get();
System.out.println(str); // abc
}
}
null
체ν¬λ₯Ό νμ§ μκ³ λ°λ‘ κ°μ κ°μ Έμ€κ² λλ©΄ ν΄λΉ κ°μ²΄κ° null
μΌ μλ μκΈ° λλ¬Έμ 체ν¬λ₯Ό ν΄μ£Όλ κ²μ΄ μ’λ€.
Optional
κ°μ²΄μμ null
체ν¬λ₯Ό νκΈ° μν΄ μλμ κ°μ λ©μλλ€μ μ¬μ©ν μ μλ€.
λ©μλ
κ°μ΄ μμ λ
κ°μ΄ μμ λ
ifPresent(Consumer<? super T> action)
μ무 λμλ νμ§ μμ
ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
μ λ¬ λ°μ μΈμλ₯Ό λ°ν
orElseGet(Supplier<? extends T> other)
Supplier
λ₯Ό μ€νν κ²°κ³Όλ₯Ό λ°ν
orElseThrow(Supplier<? extends X> exceptionSupplier)
Supplier
κ° μ 곡νλ μμΈλ₯Ό λ°μ
class Example {
public static void main(String[] args) {
Optional<String> opt = Optional.of("abc");
// ifPresent: κ°μ΄ μλμ§ νμΈ -> μν° ν¨ν΄
if (opt.isPresent()) {
System.out.println(opt.get()); // abc
}
// ifPresent + λλ€μ
Optional<String> opt1 = Optional.of("abc");
opt1.ifPresent(s -> System.out.println(s.toUpperCase())); // ABC
opt1 = Optional.empty();
opt1.ifPresent(s -> System.out.println(s.toUpperCase())); // null
// ifPresentOrElse + λλ€μ
Optional<String> opt2 = Optional.of("abc");
opt2.ifPresentOrElse(
s -> System.out.println(s.toUpperCase()),
() -> System.out.println("null")
); // ABC
opt2 = Optional.empty();
opt2.ifPresentOrElse(
s -> System.out.println(s.toUpperCase()),
() -> System.out.println("null")
); // null
// orElse: κ°μ΄ μμΌλ©΄ κΈ°λ³Έκ° μ€μ
Optional<String> opt3 = Optional.of("abc");
System.out.println(opt3.map(String::toUpperCase).orElse("null")); // ABC
opt3 = Optional.empty();
System.out.println(opt3.map(String::toUpperCase).orElse("null")); // null
// orElseGet: κ°μ΄ μμλ Supplier μΈν°νμ΄μ€λ₯Ό λ°μ μ€ννμ¬ κΈ°λ³Έκ° μ€μ
Optional<String> opt4 = Optional.of("abc");
System.out.println(opt4.map(String::toUpperCase).orElseGet(() -> "null")); // ABC
opt4 = Optional.empty();
System.out.println(opt4.map(String::toUpperCase).orElseGet(() -> "null")); // null
// orElseThrow: κ°μ΄ μμ λ μμΈ λ°μ
Optional<String> opt5 = Optional.of("abc");
System.out.println(opt5.orElseThrow(IllegalArgumentException::new)); // abc
opt5 = Optional.empty();
System.out.println(
opt5.orElseThrow(IllegalArgumentException::new)
); // IllegalArgumentException
}
}
μ°Έκ³ μλ£
Last updated