개발/JAVA

JAVA - Optional

잇(IT) 2023. 6. 5. 01:52
728x90

- Optional을 알기 전 NullPointerException을 알아야 한다.

 

- NullPointerException이란?

1. null 값이 반환되면 발생하는 예외이다.

 

- Optional이란?

1. JAVA8에서는 Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 도와준다.

2. Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.

public final class Optional<T> {

  // If non-null, the value; if null, indicates no value is present
  private final T value;
   
  ...
}

3. Optional 클래스는 위와 같이 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 떄문에 각종 메소드를 제공해준다.


- Optional 생성하기

1. Optional.empty() : 값이 Null인 경우

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

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

 

- Optional.empty() : 값이 Null인 경우

1. Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다.

Optional<String> optional = Optional.empty();

System.out.println(optional); // Optional.empty
System.out.println(optional.isPresent()); // false

 

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

1. 만약 어떤 데이터가 절대 null이 아니라면 Optional.of()로 생성할 수 있다. 만약 Optional.of()로 Null을 저장하려고 하면 NullPointerException이 발생한다.

// Optional의 value는 절대 null이 아니다.
Optional<String> optional = Optional.of("MyName");

 

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

1. 만약 어떤 데이터가 null이 올 수도 있고 아닐 수도 있는 경우에는 Optional.ofNullbale로 생성할 수 있다. 그리고 이후에 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.

// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous"); // 값이 없다면 "anonymous" 를 리턴

 

 

 

 

 

 

 

 

 

 

 

 

* 참조 : https://mangkyu.tistory.com/70

728x90