📌 Optional
- JAVA8 부터 생긴 새로운 기능
- Optional 클래스를 사용하여 *NPE(NullPointerException)를 방지
- Optional 클래스는 Null이 올 수 있는 값을 감싸는 래퍼(Wrapper) 클래스
- Optional 클래스는 제너릭(Generic)으로 값의 타입을 지정
- 클래스이기 때문에 다양한 메서드들을 제공
- Optional은 값을 Wrapping 하고 다시 풀때 null일 경우 대체하는 함수를 호출
→ 오버헤드 발생 할 수 있으므로 잘 못 사용 시 시스템 성능 저하
→ 메서드의 반환 값이 절대 null이 아니라면 Optional 사용을 권장하지 않음
*NPE(NullPointerException)
- 개발을 할 때 많이 발생하는 예외 중 하나로 NPE를 피하려면 Null 여부를 검사해야하는데, 검사해야하는 Null이 많을수록 코드가 복잡해지고 예외처리가 번거로워진다.
Optional 생성
Optional.empty()
⇒ 값이 Null인 경우
- 값이 null이라도 NPE를 발생시키지 않고, Optional.empty를 리턴
Optional<String> optional = Optional.empty();
System.out.println(optional);
System.out.println(optional.isPresent());
Optional.of()
⇒ 값이 Null이 아닌 경우
- 값이 절대 null일 수 없는 경우 사용
- 만약 null로 저장할 경우 NullPointerException 발생
Optional<String> optional = Optional.of("MyName");
Optional.ofNullbale()
⇒ 값이 Null일 수도, 아닐 수도 있는 경우
orElse
, orElseGet
메서드를 사용하여 값이 없는 경우라도 안전하게 값을 가져올 수 있음
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("Null");