개발하다가 optional 을 사용하는 코드가 있길래 궁금해졌다.
public final class Optional<T> {
private final T value; //T타입의 참조변수
...
}
Optional< T >는 제네릭 클래스로 T타입의 객체를 감싸는 래퍼 클래스이다. 때문에 Optional 타입의 객체에는 모든 타입의 참조변수를 담을 수 있다.
왜 Optional을 쓰는 걸까?
개발을 하다보면 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다.
때문에 최종 연산 결과를 그냥 반환하는 것이 아니라 Optional 객체에 담아서 반환하게 되면, 반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 간단히 null인지 확인할 수 있기 때문이다.
String str = "abc";
Optional<String> optval = Optional.of(str);
Optional<String> optval = Optional.of("abc");
Optional<String> optval = Optional.of(new String("abc"));
Optional<String> optval = Optional.of(null); //NPE 발생
Optional<String> optval = Optional.ofNullable(null);
Optional<String> optval = Optional.of("abc");
String str1 = optVal.get(); //optVal에 저장된 값을 반환, null이면 NPE
String str2 = optVal.orElse(""); //optVal에 저장된 값이 null일때는 ""을 반환
참고한 블로그
https://mangkyu.tistory.com/70
[자바의 정석], 남궁성 2.4 Optional와 OptionalInt