Optional<T>는 Java 8에서 추가된 클래스로, 주어진 값이 null일 가능성을 명시적으로 처리하기 위해 사용됩니다. 이를 통해 null을 직접 다루지 않고도 안전하게 코드를 작성할 수 있습니다.
주요 메서드:
- isPresent()
- Optional에 값이 있는지 여부를 확인합니다.
- 반환 타입: boolean
- true는 값이 존재한다는 뜻이고, false는 값이 없음을 의미합니다.
- get()
- 값이 존재하는 경우 값을 반환합니다.
- 값이 없으면 NoSuchElementException을 던집니다.
- 이 메서드는 값이 확실히 있을 때만 사용해야 하며, 그렇지 않은 경우 orElse() 또는 orElseThrow()를 사용하는 것이 좋습니다.
- orElse(T other)
- 값이 존재하면 해당 값을 반환하고, 그렇지 않으면 지정된 other 값을 반환합니다.
- orElseThrow(Supplier<? extends X> exceptionSupplier)
- 값이 존재하지 않을 경우 예외를 던집니다.
- Supplier 인터페이스를 사용하여 어떤 예외를 던질지 지정할 수 있습니다.
- map(Function<? super T, ? extends U> mapper)
- 값이 존재하면 해당 값을 매핑하여 새 값을 반환합니다.
- 값이 없으면 빈 Optional을 반환합니다.
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
// 1. isPresent() 예시
Optional<String> optional1 = Optional.of("Hello, World!");
Optional<String> optional2 = Optional.empty();
System.out.println("optional1 is present: " + optional1.isPresent()); // true
System.out.println("optional2 is present: " + optional2.isPresent()); // false
// 2. get() 예시
if (optional1.isPresent()) {
System.out.println("optional1 value: " + optional1.get()); // Hello, World!
}
// 3. orElse() 예시
String value1 = optional1.orElse("Default Value");
String value2 = optional2.orElse("Default Value");
System.out.println("Value from optional1: " + value1); // Hello, World!
System.out.println("Value from optional2: " + value2); // Default Value
// 4. orElseThrow() 예시
try {
String value3 = optional2.orElseThrow(() -> new IllegalArgumentException("Value is absent"));
} catch (Exception e) {
System.out.println(e.getMessage()); // Value is absent
}
// 5. map() 예시
Optional<Integer> mappedOptional = optional1.map(String::length);
System.out.println("Length of optional1's value: " + mappedOptional.orElse(0)); // 13
Optional<Integer> emptyMappedOptional = optional2.map(String::length);
System.out.println("Length of optional2's value: " + emptyMappedOptional.orElse(0)); // 0
}
}
'공부 노트' 카테고리의 다른 글
extends와 implements 차이점 (0) | 2024.11.19 |
---|---|
CRUD란? (0) | 2024.10.02 |
빈(Bean)이란? (1) | 2024.10.02 |
응답 코드 확인 (꼭 알아 두어야 하는 코드!!) (0) | 2024.10.02 |
추상화와 다형성 (1) | 2024.09.26 |