본문 바로가기

JAVA

[Java] Optional 이란?

728x90
반응형

Java로 프로그래밍 하다보면 정의되지 않은 객체에 대해 null값을 고려하게 되는 경우가 발생한다.

안정적인 실행을 위해서는 null값을 처리해 NullPointerException(NPE)가 발생하지 않게 체크해야 한다.

 

Java8부터는 Optional<T> 클래스를 사용해 NPE를 방지할 수 있다.

Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, NPE가 발생하지 않도록 도와준다.

즉, 예상치 못한 NPE를 제공되는 메소드로 간단히 회피할 수 있어 복잡한 조건문 없이도 null값으로 인해 발생하는 예외를 처리할 수 있다.

Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있음.

만약 Optional 객체에 저장된 값이 null이면, NoSuchElementException 예외가 발생

 

public final class Optional<T> {
    private final T value;
    ...
}

Optional 클래스는 위처럼 value에 값을 저장하기 때문에 null이더라도 바로 NPE가 발생하지 않는다.

 

public class MemoryMemberRepositoryTest {

	MemoryMemberRepository repository = new MemoryMemberRepository();
    
    @Test
    public void optionalTest() {
    	String name = "kah";
        
        Optional<Member> user = userRepository.findByName(name);
        if(user.isPresent()) {
        	System.out.println("이미 존재하는 회원입니다.");
        }
    }
}

메소드설명

static Optional empty() 아무런 값도 가지지 않는 비어있는 Optional 객체를 반환함.
T get() Optional 객체에 저장된 값을 반환함.
boolean isPresent() 저장된 값이 존재하면 true를 반환하고, 값이 존재하지 않으면 false를 반환함.
static Optional of(T value) null이 아닌 명시된 값을 가지는 Optional 객체를 반환함.
static Optional ofNullable(T value) 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환하며, 명시된 값이 null이면 비어있는 Optional 객체를 반환함.
T orElse(T other) 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환함.
T orElseGet(Supplier<? extends T> other) 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환함.
T orElseThrow(Supplier<? extends X> exceptionSupplier) 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킴.
728x90
반응형