자바

[자바 개념] Optional<T>

라임온조 2023. 3. 8. 12:10

1. 개념

T타입의 객체를 감싸는 래퍼 클래스

2. 특징

  • 최종 연산의 결과를 그냥 반환하는 게 아니라 Optional 객체에 담아서 반환을 하면 반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 간단히 처리 가능
  • 널 체크를 위한 if문 없이도 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능

3. Optional<T> 객체 생성하기

1) of

  • 값이 null이면 NullPointerException을 발생시킴
  • 들어갈 값이 null 아닌 것이 확실할 때 사용

2) ofNullable

  • 값이 null이어도 NullPointerException을 발생시키지 않음
  • 들어갈 값이 null인 것이 확실하지 않을 때 사용

3) empty

  • 변수를 빈 객체로 초기화할 때 사용
  • null 을 담고 있는 Optional 객체를 리턴
Optional<String> optVal = Optional.of("abc");
Optional<String> optVal2 = Optional.ofNullable(null);
Optional<String> optVal3 = Optional.<String>empty();

4. Optional<T> 객체의 값 가져오기

1) get()

  • Optional 객체에 저장된 값을 가져온다
  • 값이 null일 때는 NoSuchElementException이 발생

2) orElse()

  • get만을 이용해서 객체의 값을 가져올 때 NoSuchElementException이 발생하는 것을 방지하기 위해 사용
  • 만약 객체의 값이 null일 때 orElse()에 지정된 값을 가져오도록 할 수 있음

3) orElseThrow()

  • 값을 가져오다 null이면 예외를 발생시키도록 함
Optional<String> optVal = Optional.of("abc");
String str1 = optVal.get();
String str2 = optVal.orElse("test");
String str3 = optVal.orElseThorw(NullPointerException::new);

4) isPresent()

  • Optional 객체의 값이 null이면 false를, 아니면 true를 리턴한다.

5) ifPresent()

  • 값이 있으면 주어진 람다식을 실행하고, 없으면 아무 일도 하지 않는다
if(Optional.ofNullable(str).isPresent()){
	System.out.println(str);
}

Optional.ofNullable(str).ifPresent(System.out::println); // str이 null이 아닐 때만 print가 된다

'자바' 카테고리의 다른 글

[자바 개념] StringTokenizer  (0) 2023.03.19
[자바 개념] IO(입출력)  (0) 2023.03.19
[자바 개념] 정규표현식, Pattern  (0) 2023.02.10
[자바 개념] StringBuffer, StringBuilder  (0) 2023.02.06
[자바 개념] 자바 데이터 타입  (0) 2023.01.13