Optional이란?

Optional 나온 이유?


Optional 클래스는 Java 8부터 나온 개념으로 NPE를 방지하기 위해 나왔다.

 

 

우리가 자바 개발을 할 때 객체가 null값을 주게되는 경우가 있다. 이때 이 객체를 참조하면 null을 참조하는 것이 되기 때문에 NPE[NullPointerException] 예외가 발생하게 된다.

때문에 개발자들은 NPE 발생을 줄이기 위해 null 확인을 하기 위한 조건문을 추가하였다.

User user = userService.getUser(id);

if(user != null) {
	String email = user.getEmail();
}

 

위와 같이 조건문으로 null 확인을 하여 NPE를 방지한다 하더라도 이러한 방식은 코드를 어지럽히기에 가독성을 저하시킨다.

 

Java는 이를 위해 java.util.Optional<T>라는 새로운 클래스를 제공한다.

 

 

 

 

 

 

Optional 클래스


Optional<T> 클래스는 어떤 식으로 NPE를 방지해주는 것일까?

 

Optional<T> 클래스는 null이 올 수 있는 값을 캡슐화하는 Wrapper 클래스이다.

때문에 null을 참조하더라도 Optional 클래스가 값을 감싸고 있어 Optional.empty 메소드로 Optional을 반환한다. 

 

덕분에 null을 참조하면 NullPointerException이 발생했지만 Optional<T> 클래스를 사용함으로 NPE 발생을 방지해준다.