Optional<T>와 OptionalInt

2022. 4. 15. 11:25·자바/스트림

1. Optional<T>

- Optional<T>은 지네릭 클래스로 "T타입의 객체"를 감싸는 래퍼 클래스이므로,

모든 타입의 참조변수를 담을 수 있다.

 

 

- 최종 연산의 결과를 그냥 반환하는 것이 아니라 Optional객체에 담아서 반환한다.

 

- 또한 Optional 클래스는 null인지 아닌지 알려주는 정의된 메서드가 포함되어 있다.

 

 

public final class Optional<T>{

     private final T value;         // T타입의 참조변수 

   ...

}

 

 

- 아래는 Optional<T> 클래스에 정의된 메서드들이다.

 

(1) Optional.of() - static

: 해당 객체에 값을 초기화한다.

 

( ex) Optional.of("abc"), Optional.of(new String("abc")) )

( 만약 참조변수의 값이 null일 가능성이 있으면, ofNullable()을 사용해야 한다. )

 

 

(2) Optional.<T>empty() - static

: 참조변수를 기본 값으로 초기화한다.

 

( null로 초기화가 가능하지만 되도록이면 empty()를 사용하는 것이 바람직하다. )

 

(3) 참조변수.get()

: 참조변수에 저장된 값을 가져올 때 사용되는 메서드이다.

 

( 값이 null일 때는 NoSuchElementException이 발생하며, orElse()로 대처할 수 있다. )
( orElse()에 값을 넣으면, 그 값이 반환된다. )

( ex) orElse("10") -> "10"이 리턴 )

 

( null을 대처할 값을 반환하는 람다식을 지정할 수 있는 orElseGet()이 있다. )

( null일 때 지정된 예외를 발생시키는 람다식을 지정할 수 있는 orElseThrow()가 있다. )

( 사용방법은 아래와 같다. )

 

String str1 = optVal.orElseGet(String::new);  // () -> new String()와 동일

String str2 = optVal.orElseThrow(NullPointerException::new);

 

 

(4) filter(), map(), flatMap()

: Stream처럼 Optional<String>이나 Optional<Optional<String>>을 처리할 수 있다.

 

( 만약 null이면, 이 메서드들은 아무 일도 하지 않는다. )

( 아래의 예시를 보자. )

 

 

 

(5) isPresent()

: Optional 객체의 값이 null이면 false를, 아니면 true를 반환한다.

 

( 아래의 예시를 보자. )

 

 

( 또한 ifPresent()를 사용하여 아래와 같은 코드를 출력할 수 있다. )

( null이 아닐 경우, 괄호() 안에 있는 것이 실행한다. )

( ifPresent() 메서드는 findAny()나 findFirst()와의 최종 연산에 어울린다. )

 

 

 

 

2. OptionalInt, OptionalLong, OptionalDouble

- Optional 또한 Stream 처럼 기본형 값을 하는 메서드를 지원한다.

 

- 반환 타입이 Optional<T>가 아니라는 것을 제외하고는 Stream에 정의된 것과 비슷하다.

 

 

- 주의할 것은 기본형의 기본값 0인 객체와 Empty()로 초기화 된 기본값 0의 객체는

아래의 예제 코드처럼 서로 같지 않다.

 

 

( 참고) Optional 객체에 null을 저장하면, empty() 객체와 똑같다. )

 

 

 

 

1-1. Optional를 이해하기 위한 예제(1)

 

 

'자바 > 스트림' 카테고리의 다른 글

collect() 메서드(1)  (0) 2022.04.19
스트림의 최종 연산(조건 검사, 통계, 리듀싱)  (0) 2022.04.15
스트림의 중간 연산(3)  (0) 2022.04.14
스트림의 중간 연산(2)  (0) 2022.04.14
스트림의 중간 연산(1)  (0) 2022.04.13
'자바/스트림' 카테고리의 다른 글
  • collect() 메서드(1)
  • 스트림의 최종 연산(조건 검사, 통계, 리듀싱)
  • 스트림의 중간 연산(3)
  • 스트림의 중간 연산(2)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      outputstream
      java.lang패키지
      유용한 클래스
      TCP 소켓 프로그래밍
      snail
      소켓 프로그래밍
      알고스팟
      java.time 패키지
      코딩트리조별과제
      문자 기반 스트림
      불안정 정렬
      안정 정렬
      다형성
      Collections Framework
      역직렬화
      자바 개념
      InputStream
      코드트리
      ServerSocket
      serializable
      코딩테스트
      Arrays
      람다식
      제자리 정렬
      file
      선택 정렬
      안드로이드 스튜디오
      중간연산
      스트림
      map()
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    Optional<T>와 OptionalInt
    상단으로

    티스토리툴바