Study/Java

[JAVA] Optional 이란?

토기발 2022. 12. 6. 23:59

김영한님의 스프링 강의를 듣는데 Optional을 강의 중 자주 사용하셨는데 나는 잘 모르는 개념이라 검색을 했다.

잊어버리지 않게 검색해서 찾은 내용을 정리해보기로 한다.

 

 

 

Optional 이란? 

java.util.Optional<T> 

Java8부터 지원하는 클래스이다.

Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다.

 

왜 사용하는가?

null이 올 수 있는 값을 감싸는 Wrapper 클래스이기 때문에 if(value !=null){} 등의 복잡한 코딩을 하지 않고도 NPE(NullPointerException)를 방지해준다.

 

 

객체 생성

of() 메소드나 ofNullable(), empty()  메소드를 사용하여 Optional 객체를 생성할 수 있다.

of()의 경우에는 반드시 값이 있어야 하고, null일 경우에는 에러가 난다.

ofNullable() 는 값이 있을 수도, 없을 수도 있을 때 사용한다. 그리고 이후에 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.

empty()는 값이 없을 경우 사용한다.

 

 

객체에 접근

get()만 사용했을 때 값이 null일 경우 NPE오류가 발생하기 때문에 get() 메소드를 호출하기 전에 isPresent() 메소드를 사용하여 Optional 객체에 저장된 값이 null인지 아닌지를 먼저 확인한 후 호출하는 것이 좋다.

Optional<String> opt = Optional.ofNullable("자바 Optional 객체");

if(opt.isPresent()) {

    System.out.println(opt.get());
}

실행결과: 자바 Optional 객체

 

 

 

참고:

http://www.tcpschool.com/java/java_stream_optional 

https://juno-juno.tistory.com/51


 

강의에서나 검색을 했을 때 optional객체 사용은 람다식을 사용하고, stream이나 filter도 함께 사용했는데

이 부분에 대해서는 좀 더 공부를 해보고 내용을 추가하도록 하겠다.