김영한님의 스프링 강의를 듣는데 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도 함께 사용했는데
이 부분에 대해서는 좀 더 공부를 해보고 내용을 추가하도록 하겠다.
'Study > Java' 카테고리의 다른 글
[JAVA] 스택(stack) (0) | 2022.11.22 |
---|---|
[JAVA] 내부 클래스 (0) | 2022.11.13 |
[JAVA] for문 축약(for each문), if-else 축약(삼항 연산자) (0) | 2022.10.18 |
[JAVA] 클래스 변수, 인스턴스 변수, 지역 변수 (0) | 2022.10.12 |
[JAVA] 생성자 (0) | 2022.10.10 |