Java8, Optional 이란?

김민경·2022년 11월 8일
0

📌 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); // 출력 : Optional.empty
System.out.println(optional.isPresent()); // 출력 : false
  • Optional.of() ⇒ 값이 Null이 아닌 경우
    • 값이 절대 null일 수 없는 경우 사용
    • 만약 null로 저장할 경우 NullPointerException 발생
Optional<String> optional = Optional.of("MyName");
  • Optional.ofNullbale() ⇒ 값이 Null일 수도, 아닐 수도 있는 경우
    • orElse , orElseGet 메서드를 사용하여 값이 없는 경우라도 안전하게 값을 가져올 수 있음
Optional<String> optional = Optional.ofNullable(getName());

// 값이 없다면 "Null"를 리턴
String name = optional.orElse("Null"); 

0개의 댓글