📌 Optional
이란 NullPointerException
을 피하기 위한 수단이다.
NullPointerException
을 피하기 위해서는 null
을 검사하는 로직을 추가해야하는데 null
검사를 해야하는 변수가 많은 경우에 코드가 복잡해지고 로직이 번거롭다.
Java8에서는 Optional<T>
클래스를 사용해 NPE
를 방지할 수 있도록 도와준다. 이는 null
이 올 수 있는 값을 감싸는 wrapper
클래스로, 참조하더라도 NPE
가 발생하지 않도록 도와준다.
그리고 orElse
또는 orElseGet
메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.
그러나 Optional
은 값을 wrapping하고, 다시 풀고,
null
일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 성능이 저하될 수 있다.
그러므로 메소드의 반환 값이 절대 null
이 아니라면 Optional
을 사용하지 않는 것이 성능저하가 적다.
String name = getName();
String result = "";
try {
result = name.toUpperCase();
} catch (NullPointerException e) {
throw new CustomUpperCaseException();
}
이를 Optional
을 활용하면 다음과 같다.
Optional<String> nameOpt = Optional.ofNullable(getName());
String result = nameOpt.orElseThrow(CustomUpperCaseExcpetion::new).toUpperCase();