옵셔널

김인범's avatar
Nov 21, 2024
옵셔널

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("값이 없습니다. 주의"));
notion image
※실행 시 콘솔 결과
data1 은 null 값이여서, 실행되지 않았습니다.
data2 는 null 값이여서 미리 설정해둔 “없음”이 결과로 나왔습니다.
data3 은 문자열”222222” 가 값으로 들어가 있는 데이터여서 sysout을 통해 그대로 나왔습니다.
data4 는 null 값이여서 RuntimeException 오류로 콘솔창에 설정해 두었던 경고문이 나타났습니다.
 

장점과 단점

장점

NullPointerException을 효과적으로 방지할 수 있다.
null 처리 로직을 명시적으로 작성하여 코드의 가독성을 높입니다.
함수형 프로그래밍과 잘 어울립니다.

단점

너무 많이 사용할 경우 코드가 복잡해질 수 있습니다.
성능이 중요한 상황에서는 오버헤드가 발생할 수 있습니다.
Optional 을 필드에 사용하기보다, 메서드 반환값으로 사용하는 것이 권장됩니다.
Share article

More articles

See more posts

taker