Optional에 대하여

Soohyeon B·2022년 9월 8일
0

개발하다가 optional 을 사용하는 코드가 있길래 궁금해졌다.

public final class Optional<T> {
	private final T value; //T타입의 참조변수
    ...
}

Optional< T >는 제네릭 클래스로 T타입의 객체를 감싸는 래퍼 클래스이다. 때문에 Optional 타입의 객체에는 모든 타입의 참조변수를 담을 수 있다.

왜 Optional을 쓰는 걸까?

개발을 하다보면 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다.

때문에 최종 연산 결과를 그냥 반환하는 것이 아니라 Optional 객체에 담아서 반환하게 되면, 반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 간단히 null인지 확인할 수 있기 때문이다.

Optional 객체 생성하기

String str = "abc";
Optional<String> optval = Optional.of(str);
Optional<String> optval = Optional.of("abc");
Optional<String> optval = Optional.of(new String("abc"));
  • optional 객체를 생성할 때는 of()또는 ofNullable()을 사용한다.
Optional<String> optval = Optional.of(null); //NPE 발생
Optional<String> optval = Optional.ofNullable(null);
  • 참조변수의 값이 null일 가능성이 있으면 of()대신 ofNullable()을 사용한다.

Optional 객체의 값 가져오기

Optional<String> optval = Optional.of("abc");
String str1 = optVal.get(); //optVal에 저장된 값을 반환, null이면 NPE
String str2 = optVal.orElse(""); //optVal에 저장된 값이 null일때는 ""을 반환
  • 저장된 객체를 가져올 때는 get()
  • null일 때는 orElse()로 대체할 값 지정 가능

참고한 블로그
https://mangkyu.tistory.com/70
[자바의 정석], 남궁성 2.4 Optional와 OptionalInt

profile
하루하루 성장하는 BE 개발자

0개의 댓글