Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- json-server
- maeil-mail
- 테코테코
- Get
- JavaScript
- 항해99
- react
- axios
- programmers
- 알고리즘
- sw expert academy
- 프로그래머스
- C++
- 이코테
- 리액트
- redux-saga
- react-router
- createSlice
- react-redux
- java
- 자바
- 항해플러스
- 코딩테스트합격자되기
- Python
- Algorithm
- redux
- redux-toolkit
- 매일메일
- useDispatch
- SW
Archives
- Today
- Total
Binary Journey
[Java][Java 8] Optional 활용하기, orElseGet 본문
반응형
Java로 백엔드를 개발하는 중에 Optional을 쓴다면 아래와 같이 많이들 썼을 것이다.
// ServiceImpl
@Override
public Entity findOneEntity(Long entityId) {
Optional<Entity> optEntity = entityRepository.findById(entityId);
Entity entity = new Entity();
if(optEntity.isPresent()) {
entity = optEntity.get();
}
return entity;
}
오늘 이걸 두 문장으로 끝내버리는 Optional 함수 orElseGet 을 알아냈다.
orElseGet은 찾아온 값이 null 이 아닐 경우에만 값을 get 해준다.
위와 아래 코드에서 의도된 return 값은 같다.
// ServiceImpl
@Override
public Entity findOneEntity(Long entityId) {
Optional<Entity> optEntity = entityRepository.findById(entityId);
return optEntity.orElseGet(Entity::new);
}
위 식은 optEntity에 값이 없을(null) 경우
Entity entity = new Entity();
값이 있을 경우(not null)
Entity entity = optEntity.get();
이렇게 된다.
만약 orElseGet 대신 orElse 를 쓰게 된다면
// ServiceImpl
@Override
public Entity findOneEntity(Long entityId) {
Optional<Entity> optEntity = entityRepository.findById(entityId);
return optEntity.orElse(new Entity());
}
값이 있든 없든
Entity entity = new Entity();
이 값만 return 해 준다.
orElseGet 안에 null을 넣는 것도 가능하다. -> 2/18 오류발생으로 수정한다.
코드 상으로는 null을 넣는 것은 가능하지만 이럴 경우 NullPointerExceiption이 발생한다.
return optEntity.orElseGet(null);
애초에 NullPointerExceiption 방지하려 쓴 orElseGet 인데 위의 경우는 무용지물이므로
return optEntity.orElse(new Entity());
return optEntity.orElse(Entity::new);
위처럼 쓰는 것을 권장한다.
나의 경우
Entity entity = entityRepository.findById(entityDto.getEntityId()).orElseGet(Entity::new);
if (entity.getEntityId() == null {
throw SomeException;
}
이런 방식으로 사용하였다.
참고 사이트: homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/
반응형
'Java | Spring' 카테고리의 다른 글
[Java] SLF4J LoggerFactory 사용 (0) | 2021.04.05 |
---|---|
[Java] Why does the string data type have a .toString() method? (0) | 2021.04.05 |
[Java][Springboot] (4) Spring 프로젝트 생성하기, VSCode Spring Initializer, 삽질의 연속 (0) | 2020.11.26 |
[Java][Java 8, Java 10] Optional 활용하기, orElseThrow (0) | 2020.11.26 |
[Java][JPA][Issue] (datetime) 'COLUMN_NAME' cannot be null (0) | 2020.11.11 |