본문 바로가기
IT/Java

Optional – orElse() 와 orElseGet()

by 성준하이 2023. 6. 16.
반응형

이전 포스팅에서 Optional 에 대한 내용을 다룬적이 있다.

자세한 내용은 아래 참고 포스팅 참고 바란다.

 

Optional 은 결국엔 NPE 를 해결하기 위해서 생겨났고,
만약 Null일 경우엔 default 값을 넣어줄수 있는 개념으로 만들어진 함수가 바로 이

orElse / orElseGet 이다.

 

결국 둘다 null일때 default 를 받을건데 둘의 차이는 어떤것인지 확인해보면

 

orElse() : T 클래스를 인수로 받음

orElseGet() : T 클래스를 상속받은 하위 클래스를 return해주는 Supplier 함수 인터페이스를 받음

 

좀더 이해하기 쉽게 예시를 들어서 설명하면 다음과 같다.

 

orElse
Optional<String> text = "a";

Sting bb = text.orElse(testMethod());
Sting cc = text.orElseGet(testMethod());

이렇게 bb 와 cc가 있다.

하지만 현재 text는 값이 있는 상황이다.

 

이럴 경우 orElse는 testMethod()가 호출이 되고.

orElseGet에 있는 testMethod()는 호출이 되지않는다.

 

사용시에는 유의해서 사용을 해야한다.

 

또한 메서드 뿐 아니라 객체를 사용할때는 객체를 담을수도 있다.

Optional<OptionalDto> ddd = Optional.ofNullable(OptionalDto.builder().name("AAA").build());

OptionalDto d = new OptionalDto(null);

OptionalDto dto = ddd.orElse(d);

참고 포스팅

https://thenicesj.tistory.com/306

 

Optional 이란?

지난 포스팅에서 dto 변수의 null 에 대한 포스팅을 다뤄본적이 있다. 관련 내용은 아래 참고 포스팅에 존재한다. 하지만 변수가 null이 아니라 dto 자체가 예를들어 쿼리의 결과가 없어서 dto 자체가

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

@PostConstruct, @PreDestroy 어노테이션  (39) 2023.06.20
JVM 내에 저장되어있는 데이터 위치 값 확인  (32) 2023.06.18
[eclipse] Ant 란?  (36) 2023.06.15
Java 에서의 정규 표현식  (38) 2023.06.14
자바에서 Null 체크 관련(if)  (44) 2023.06.09

댓글