Optional 이란?

Bong2·2022년 4월 3일
0

JAVA

목록 보기
15/16

Optional

  • java 8 이상부터 지원
  • NullPointerException를 방지
  • null이 올수 있는 값을 감싸는 Wrapper 클래스
public final class Optional<T> 
{ // If non-null, the value; if null, indicates no value is present
private final T value; 

... 
}

사용법

Optional 생성

Optional.empty() - 값이 비어있는 경우

//Wrapper 클래스이기 때문에 빈 값이 올수도 있다.
Optional<String> optional=Optional.empty();

Optional.of() - 값이 Null이 아닌 경우

//Null을 저장하려고 하면 NullPointerException 발생
Optional<String> optional=Optional.of("MyName");

Optional.ofNullable() -값이 Null일수도 아닐수도 있는 경우

Optional<String> optional=Optional.ofNullable(getName());
String name= optional.orElse(""); //값이 없다면 "" 리턴

Optional은 Wrapping하고 다시 풀고, null일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못하면 성능이 저하될수 있다. 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다.

중간 처리

  • filter() : 메소드의 인자로 받은 람다식이 참이면, Optional 객체를 그대로 통과시키고 거짓이면 Optional.empty()를 반환
// ABCD
Optional.of("ABCD").filter(v -> v.startsWith("AB")).orElse("Not AB");

// Not AB
Optional.of("XYZ").filter(v -> v.startsWith("AB")).orElse("Not AB");
  • map() : 객체의 값을 어떤 수정을 가해 다른 값으로 변경
// xyz -> 소문자로 변환
Optional.of("XYZ").map(String::toLowerCase).orElse("Not AB");

값을 반환

  • isPresent() : Optinal 객체가 null인지 여부
Optional.of("TEST").isPresent(); // true
  • ifPresent() : 값이 존재하면 실행
// TEST 출력
Optional.of("TEST").ifPresent(System.out::println);

// 아무것도 출력되지 않음
Optional.ofNullable(null).ifPresent(System.out::println);
  • get() : 해당 객체의 값을 반환
Optional.of("TEST").get(); // "TEST" 리턴
Optional.ofNullable(null).get(); // NoSuchElementException
  • orElse() : 객체의 값이 비어있다면 해당 값을 반환, 메소드의 인자를 항상 평가
Optional.of("XYZ").filter(v -> v.startsWith("AB")).orElse("Not AB");
  • orElseGet() : Optional 객체가 비어있는 경우에만 Supplier 함수를 실행
// "Not AB" 리턴
Optional.of("XYZ").filter(v -> v.startsWith("AB")).orElseGet(() -> "Not AB");
  • orElseThrow : Optional 객체가 비어있는 경우에만 Supplier 함수를 실행하여 에러 반환
Optional.of("XYZ").filter(v -> v.startsWith("AB")).orElseThrow(NoSuchElementException::new);
profile
자바 백엔드 개발자로 성장하자

0개의 댓글

관련 채용 정보