본문 바로가기
JAVA

Optional<T> 는 무엇인가..?

by sangfeeeeel 2021. 7. 14.

Optional는 지네릭 클래스로 'T타입의 객체'를 감싸는 래퍼 클래스이다. 그래서 Optional 타입의 객체에는 모든 타입의 참조변수를 담을 수 있다.

public final class Optional<T>{
        private final T value; //T타입의 참조변수
        ...
}

최종 연산의 결과를 그냥 반환하는 게 아니라 Optional 객체에 담아서 반환하는 것이다.이처럼 객체에 담아서 반환을 하면, 반환된 결과가 null인지 매번 if 문으로 체크하는 대신 Optional에 정의된 메서트를 통해서 간단히 처리할 수 있다.

이제 Null체크를 위한 if문 없이도 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능해진 것이다.

Optional객체 생성하기


String str = "abc";
Optional<String> optVal = Optional.of(str);
Optional<String> optVal = Optional.of("abc");
~~Optional<String> optVal = Optional.of(null);~~ // NullPointerException 발생
Optional<String> optVal = Optional.ofNullable(null); // Ok

# null대신 빈 Optional객체를 사용하자

Optional<String> optVal = null;  // null로 초기화. 바람직하지 않음
Optional<String> optVal = Optional.<String>empty(); // 빈 객체로 초기화

Optional 객체의 값 가져오기


  • Optional 객체의 값 가져오기 - get(), orElse(), orElseGet(), orElseThrow()
Optional<String> optVal = Optional.of("abc");
String str1 = optVal.get(); // optVal에 저장된 값을 반환. null이면 예외발생
String str2 = optVal.orElse(" ");// optVal에 저장된 값이 null일때는, ""를 반환
String str3 = optVal.orElseGet(String::new); // 람다식 사용가능 () -> new String()
String str4 = optVal.orElseThrow(NullPointerException::new); //null이면 예외발생

'JAVA' 카테고리의 다른 글

GC(Garbage Collector) 란?  (0) 2021.10.20
Java의 실행과정과 JVM  (0) 2021.09.18
hasNext() 와 next() 메서드  (0) 2021.04.29
JAVA - 향상된 for문  (0) 2021.04.26