spring 강의를 듣다가 optional이라는 클래스를 알게 되었다. 신기하고 중요한 클래스같아서 정리시작!
Java8에서 지원하는 클래스. 개발을 할 때 NPE(NullPointerException)이 자주 발생하는데, 이를 피하기 위해 보통 null 검사 로직을 추가한다. 하지만 null검사를 해야하는 변수가 많으면 코드가 복잡해지면서 로직도 번거로워진다. Optional 은 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않게 도와준다.
optional.empty() : 값이 비어있는 경우
Optional<String> optional = Optional.empty();
System.out.println(optional); // optional.empty
System.out.println(optional.isPresent()); // false
optional.of() : 값이 null이 아닌 경우
Optioanl<String> optional = Optional.if("myNAme");
*null로 저장하려고 하면 NPE가 발생한다.
optional.ofNullable() : 값이 null일 수도 아닐 수도 있는 경우
Optional<String> optional = optional.ofNullable(getName());
optional.orElse() : 값이 없다면 디폴트값 리턴
Optional<String> optional = optional.ofNullable(getName()).orElse("hi");
optional.isPresent() : optional값이 있으면 동작
Optional<String> result = repo.findByName(getName());
repo.ifPresent(res -> { throw new exception(); });
이 외에도 여러 함수가 있는 것 같은데 사용할때마다 추가해야겠다. 🤓
참고: https://mangkyu.tistory.com/70