NULL 값을 명시적으로 처리할 수 있도록 설계된 컨테이너 객체입니다.
NULL 값으로 인해 발생할 수 있는 오류 NullPotintException 방지 가능
NULL 체크를 명확하게 할 수 있다.
예시 코드
public static void main(String[] args) {
String data1 = null;
Optional<String> op1 = Optional.ofNullable(data1);
if (op1.isPresent()) {
String r1 = op1.get();
System.out.println("r1: " + r1);
}
String data2 = null;
String r2 = Optional.ofNullable(data2).orElseGet(() -> "없음");
System.out.println("r2: " + r2);
// ★★★★★★★
String data3 = "222222";
String r3 = Optional.ofNullable(data3).orElseThrow(() -> new RuntimeException("값이 없습니다. 주의"));
System.out.println("r3: " + r3);
}
값이 없거나 null을 허용하는 Optional 생성 (.ofNullable 메서드)
Optional<String> op1 = Optional.ofNullable(data1);
- isPresent( )
Optional에 값이 존재할 경우: return TRUE;
Optional에 값이 없을 경우: return FALSE;
String data1 = null;
Optional<String> op1 = Optional.ofNullable(data1);
if (op1.isPresent()) {
String r1 = op1.get();
System.out.println("r1: " + r1);
}
- orElseGet( ( ) → “ “ )
값이 없을 때 기본 값을 동적으로 생성하여 반환
String data2 = null
String r2 = Optional.ofNullable(data2).orElseGet(() -> "없음");
- orElseThrow( ( ) → “ ”)
값이 없을 경우 예외를 던진다.
String data3 = "222222";
String data4 = null;
String r3 = Optional.ofNullable(data3)
.orElseThrow(() -> new RuntimeException("값이 없습니다. 주의"));

※실행 시 콘솔 결과
data1 은 null 값이여서, 실행되지 않았습니다.
data2 는 null 값이여서 미리 설정해둔 “없음”이 결과로 나왔습니다.
data3 은 문자열”222222” 가 값으로 들어가 있는 데이터여서 sysout을 통해 그대로 나왔습니다.
data4 는 null 값이여서 RuntimeException 오류로 콘솔창에 설정해 두었던 경고문이 나타났습니다.
장점과 단점
장점
NullPointerException을 효과적으로 방지할 수 있다.
null 처리 로직을 명시적으로 작성하여 코드의 가독성을 높입니다.
함수형 프로그래밍과 잘 어울립니다.
단점
너무 많이 사용할 경우 코드가 복잡해질 수 있습니다.
성능이 중요한 상황에서는 오버헤드가 발생할 수 있습니다.
Optional 을 필드에 사용하기보다, 메서드 반환값으로 사용하는 것이 권장됩니다.
Share article