Optional

Haechan Kim·2022년 7월 8일
0

Spring

목록 보기
7/68

java.util.Optional<T> 클래스

Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)

Optional 객체 사용하면 NullPointException 발생하지 않도록 도와줌.

Optional 클래스는 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며 여려 관련 메소드를 제공

public final class Optional<T> {

  // If non-null, the value; if null, indicates no value is present
  private final T value;
   
  ...
}
  • Optional.ofNullable()
    값이 null 일수도 아닐수도 있는 경우
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous"); // 값이 없다면 "anonymous" 를 리턴
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
System.out.println(opt.get()); // 자바 Optional 객체
// Java8 이전
List<String> names = getNames();
List<String> tempNames = list != null 
    ? list 
    : new ArrayList<>();

// Java8 이후
List<String> nameList = Optional.ofNullable(getNames())
    .orElseGet(() -> new ArrayList<>());
  • Optional 객체에 접근
    get() 메소드로 객체에 저장된 값에 접근.
    저장된 값이 null이면 NoSuchElementException 발생.
    따라서 get() 호출 전에 isPresent() 사용해 객체에 저장된 값이 null인지 아닌지 확인 후 호출하자.
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
if(opt.isPresent()) {
	System.out.println(opt.get());
}

Optional을 사용하면 null 또는 값을 감싸서 NPE 부담을 줄일 수 있지만 값을 wrapping 하고 다시 풀고 null일 경우 대체 함수 호출하는 등 오버헤드 있으므로 반환 값이 null일 가능성 있을 때만 사용하자.
-> 결과가 null일 수 있으며 null에 의해 오류 발생할 가능성 높을 때 반환값으로 사용.

0개의 댓글