Optional<T> , Optionallnt

Shaun·2021년 9월 18일
1

JAVA

목록 보기
26/30

Optional<T>

  • 지네릭 클래스로 T타입의 객체 를 감싸는 래퍼 클래스이다.

  • optional타입의 객체에는 모든 타입의 참조 변수를 담을수 있다.

  • null을 직접 다루는건 위험 -> optional객체에 담아서 사용.

  • Stream 최종 연산의 결과를 그냥 반환하는 게 아니라 Optional객체에 담아서 반환 하는 것이다. 이러면 반환된 결과가 null인지 매번 if문으로 체크하는 대신Optional에 정의된 메서드를 통해서 간단히 처리 가능 하다.

  • stream처럼 Optional 객체에도 filter(), map() , flatMap() 를 사용 할수있다.

Optional 객체 생성하기

  • of() 또는 ofNullable()을 사용한다.

  • 참조변수의 값이 null일 가능성이 있으면 of() 대신에 ofNullable()를 사용해준다.of()는 NullPotinException 발생하기 때문이다.

String str = "Abc"
Optinal<String> optVal=Optional.of(str);
Optional<String> optVal=Optional.ofNullable(null)
Optional<String> optVal=Optional.empty(); //초기화

Optional 객체값 가져오기

  • get()
  • orElse("") // null일때 "" 값 대신 반환
  • orElseGet()// null일떄 대체할 값 람다식으로 지정
  • orElseThrow() // null일때 지정된 에외발생

Optinal<String> optVal=Optional.of("abc");
String str1=optVal.get();
String str2=optVal.orElse("");

  • isPresent() 는 Optional 객체의 값이 null 이면 false를 아니면 true를 반환

  • ifPresent(Consumber<T.>block) 은 값이 있으면 주어진 람다식 실행 /없으면 아무일도 하지 않는다.

  • ifPresent()는 Optional<T> 를반환하는 findAny() 나 findFirst() 와 같은 최종연산과 잘 어울린다.

    Optional<T> findAny()
    Optional<T> findFirst()
    Optional<T> max()
    Optional<T> min()
    Optional<T> redyce()

OptinalInt, OptionalLong, OptionalDouble

OptionalInt findAny()
OptionalInt findFirst()
OptionalInt reduce(IntBinaryOperator op)
OptionalInt max()
OptionalInt min()
OptionalInt average()

  • IntStream 과 같이 Optional도 기본형을 값으로 하는 것들이 있다.

  • IntStream 에 정의된 메서드들이다.

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

값 꺼내기

Optional<T> ->T get()
OptionalInt -> getAsInt()
OptionalLong -> getAsLong()
OptionalDouble -> getAsDouble()

비교

OptionalInt opt = OptionalInt.of(0); //OptionalInt 에 0을저장
OptionalInt opt2 = OptionalInt.empty();//OptionalInt 에 0을저장

-> isPresent로 구별하자!

profile
호주쉐프에서 개발자까지..

0개의 댓글