Optional
μλ°μμ μμ νμ
μ μ μΈν λͺ¨λ μ°Έμ‘° λ³μλ nullμ κ°μ§ μ μμ΄, μ΄λ‘ μΈν΄ NullPointerException(NPE)μ΄ λΉλ²νκ² λ°μνλ€.
public static void main(String[] args) {
String str = "abc";
if (str != null) {
System.out.println(str.toUpperCase()); // ABC
} else {
System.out.println("null");
}
}μλ° 8μμλ Optional ν΄λμ€λ₯Ό λμ
νμ¬ λ©μλ μκ·Έλμ²λ§ λ³΄κ³ λ null λ°ν κ°λ₯μ±μ μμΈ‘ν μ μκ² νλ©°, null μ²λ¦¬λ₯Ό κ°μ νλ ν¨κ³Όλ₯Ό μ€λ€.
Optional κ°μ²΄ μμ±
Optionalμ nullμ΄ λ μ μλ κ°μ²΄λ₯Ό κ°μΈλ λνΌ ν΄λμ€λ‘, nullμ΄ λ μ μλ κ°μ²΄λ₯Ό λ΄κ³ μλ Optional κ°μ²΄λ₯Ό μμ±ν μ μλ€.
public static void main(String[] args) {
Map<String, String> map = Map.of("existKey", "existValue");
Optional<String> opt1 = Optional.of(map.get("existKey")); // `null`μ΄ μλμ 보μ₯ν λ μ¬μ©
Optional<String> opt2 = Optional.ofNullable(map.get("notExistKey")); // `null`μΌ μλ μμ λ μ¬μ©
Optional<String> opt3 = Optional.empty(); // `null`μμ λͺ
μμ μΌλ‘ λνλΌ λ μ¬μ©
}λ©μλ
μ
λ ₯ κ° null
μ
λ ₯ κ° null μλ
Optional.of(T value)
NullPointerException λ°μ
Optional κ°μ²΄ μμ± (κ°μ λ΄κ³ μμ)
Optional.ofNullable(T value)
Optional.empty() λ°ν
Optional κ°μ²΄ μμ± (κ°μ λ΄κ³ μμ)
Optional.empty()
-(nullμ λ΄κ³ μλ Optional κ°μ²΄ μμ±
-(nullμ λ΄κ³ μλ Optional κ°μ²΄ μμ±
Optional κ°μ²΄ μ‘°ν
get() λ©μλ
get() λ©μλOptional κ°μ²΄μ λ΄κΈ΄ κ°μ κ°μ Έμ€κΈ° μν΄μλ κΈ°λ³Έμ μΌλ‘ get() λ©μλλ₯Ό μ¬μ©ν΄μ κ°μ Έμ¬ μ μλ€.
νμ§λ§ λΉμ΄μλ Optional κ°μ²΄μ get()μ νΈμΆνλ©΄ NoSuchElementExceptionμ΄ λ°μν μ μκΈ° λλ¬Έμ, ifPresent()μ κ²°ν©νμ¬ μ¬μ©ν΄λ³Ό μ μλ€.
νμ§λ§ μμ κ°μ λ°©μμ if (value != null) { ... } μ½λμ λ³Έμ§μ μΌλ‘ λ€λ₯΄μ§ μμΌλ©°, Optionalμ μ₯μ μ νμ©νμ§ λͺ»νλ€.
μ¬λ°λ₯Έ Optional κ° μ‘°ν λ° μ²λ¦¬ λ°©λ²
Optional κ°μ²΄μ κ°μ μ‘°ννκ³ μ²λ¦¬νλ μν΄ λ€μν λ©μλκ° μ 곡λλ€.
ifPresent(Consumer<? super T> action)
Consumer μ€ν
μ무 λμλ νμ§ μμ
ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
Consumer μ€ν
Runnable μ€ν
orElse(T other)
κ°μ λ°ν
μ λ¬ λ°μ μΈμλ₯Ό λ°ν
orElseGet(Supplier<? extends T> other)
κ°μ λ°ν
Supplierλ₯Ό μ€νν κ²°κ³Όλ₯Ό λ°ν
orElseThrow(Supplier<? extends X> exceptionSupplier)
κ°μ λ°ν
Supplierκ° μ 곡νλ μμΈλ₯Ό λ°μ
orElse() vs orElseGet()
orElse() vs orElseGet()orElse()μ orElseGet()μ Optionalμ΄ λΉμ΄μμ λ λ체 κ°μ μ 곡νλ λμΌν κΈ°λ₯μ κ°μ§ λ©μλμ§λ§, κΈ°λ³Έκ°μ μμ±νλ μμ μμ μ°¨μ΄κ° μλ€.
orElse(T other):Optionalμ κ°μ΄ μλ μλotherκ°μ²΄κ° νμ μμ±orElseGet(Supplier<? extends T> other):Optionalμ κ°μ΄ μμ λλ§Supplierλλ€μμ΄ μ€νλμ΄ κΈ°λ³Έκ°μ΄ μμ±
λλ¬Έμ, κΈ°λ³Έκ° μμ± λΉμ©μ΄ ν° κ²½μ°μλ orElseGet()μ μ¬μ©νλ κ²μ΄ μ±λ₯μ μ 리νλ€.
Optional νμ© μ μ£Όμμ
Optionalμ λ¨μ©νλ©΄ μ€νλ € μ½λλ₯Ό 볡μ‘νκ² λ§λ€ μ μλ€.
λ©μλ λ°ν νμ μΌλ‘λ§ μ¬μ©:
Optionalμ λ©μλμ λ°ν νμ (return type)μΌλ‘ μ¬μ©λλ κ²μ κΆμ₯νλ(λ©€λ² λ³μ)λ‘ μ¬μ© κΈμ§: ν΄λμ€μ νλ νμ μΌλ‘
Optionalμ μ¬μ©νλ κ²μ κΆμ₯λμ§ μμμ§λ ¬ν λ¬Έμ , JPA λ±μμμ λΉνΈνμ± λ¬Έμ
λ©μλ λ§€κ°λ³μλ‘ μ¬μ© κΈμ§: λ§€κ°λ³μλ‘
nullμ λ³΄λΌ μ μμ΄Optionalκ°μ²΄ μ체κ°nullμ΄ λ μ μμλ©μλ μ€λ²λ‘λ©μΌλ‘ ν΄κ²°νλ κ²μ΄ λ λμ
컬λ μ λν κΈμ§: 컬λ μ μ
nullμ λ°ννκΈ°λ³΄λ€ λΉμ΄μλ 컬λ μ (μ:Collections.emptyList())μ λ°ννλ κ²μ κΆμ₯
Last updated
Was this helpful?