Optional
Null Pointer Exception을 피하는 방법 - Optional
Optional은 java 8부터 추가된 Optional은 null pointer를 피하기 위한 방법 중 하나이다.
예를 들어 아래와 같은 코드가 있다고 가정하자
//computer는 Computer 클래스의 인스턴스 변수
//getSoundcard()는 Soundcard 클래스를 반환
//getUSB()는 USB 클래스를 반환
//getVersion()은 Version 클래스를 반환한다고 가정
String version = computer.getSoundcard().getUSB().getVersion();
위 코드에서 getVersion() 메소드까지 호출하는 도중에 null을 하나라도 반환한다면 Null Pointer Execption이 발생할 것이다.
이런 Null Pointer Exception 방지하기 위해선, 기존엔 다음과 같은 코드가 필요했다.
String version = "UNKNOWN";
if(computer != null){
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null){
USB usb = soundcard.getUSB();
if(usb != null){
version = usb.getVersion();
}
}
}
그러나 Optional 오브젝트를 사용하여 반환한다면 각종 메서드를 통해 if문으로 null 체크하던 코드들을 간략하게 만들 수 있다.
예를 들어 위 코드는 아래와 같이 사용될 수 있다.
//computer는 Optional<Computer>의 인스턴스 변수임.
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Optional을 통해 Optional 이 갖고 있는 객체가 null이 아닌 경우에만 코드를 적용할 수 있어, Null Pointer Exception을 방지하는데 유용하다.
https://www.oracle.com/technical-resources/articles/java/java8-optional.html 에 Optional에 대한 설명이 자세히 나와있으니 읽어보기 바란다.