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
반응형
'JAVA' 카테고리의 다른 글
[Java] 최대공약수, 최소공배수 구하기(유클리드 호제법) (0) | 2023.03.17 |
---|---|
[JAVA] JSON 데이터(object, array) (0) | 2023.03.16 |
JPA(Java Persistence API)란? (0) | 2023.02.16 |
[JAVA] String 문자열 replace(변경), contain(포함 여부) (0) | 2022.11.28 |
[JAVA] DATEFormat_날짜 포맷 (0) | 2022.11.18 |