✅ Optional
✅ Optional 객체 생성
of()
: 값이 null이 아닌 경우에만 Optional 객체 생성 = null이면 NullPointerException 발생ofNullable()
: 값이 null인 경우에도 Optional 객체 생성 = null이면 Optional.empty()
반환empty()
: 값을 갖지 않는 빈 객체를 생성✅ 예시
public class Main {
public static void main(String[] args) {
// Optional.of() : 절대 null이 들어올 수 없는 경우
Optional<String> optional1 = Optional.of("Hello, World!");
System.out.println(optional1.get()); // Hello, World!
// Optional.ofNullable() : null이 들어올 수도 있는 경우
Optional<String> optional2 = Optional.ofNullable(null);
System.out.println(optional2.isPresent()); // false
// Optional.empty() : 비어있는 Optional 객체 생성
Optional<String> optional3 = Optional.empty();
System.out.println(optional3.isPresent()); // false
}
}
✅ Optional을 활용한 안전한 null 처리
orElse()
: 값이 없으면 기본값을 반환orElseGet()
: 값이 없으면 동적으로 값을 생성orElseThrow()
: 값이 없으면 예외 발생public class Main {
public static void main(String[] args) {
// 제네릭으로 <String> 타입을 명시를 해줘야함 = Optional 리턴타입이 Object 이기 때문에
Optional<String> optionalString = Optional.ofNullable(null);
// 방법 1: 값이 없으면 기본값 반환
String result1 = optionalString.orElse("기본값");
System.out.println(result1); // 기본값
// 방법 2: 값이 없을 때 동적 생성 (람다식 사용)
String result2 = optionalString.orElseGet(() -> "동적 기본값");
System.out.println(result2); // 동적 기본값
// 방법 3: 값이 없으면 예외 발생
// String result3 = optionalString.orElseThrow(() -> new RuntimeException("값이 없습니다!"));
// System.out.println(result3); // RuntimeException 발생
}
}