티스토리 뷰
자바에서 없는 값(*아무것도 할당되지 않은)을 조회하려고하면 바로 NullPointerException가 발생하며 오류를 뱉곤합니다.
그런 값이 존재하는지 매번 검사해주기 힘든데 이를 위해 존재하는 것이 Optional입니다.
참조하더라도 에러가 발생하지 않도록 해당 값을 감싸는 Wrapper 클래스다.
1. 해당 값이 있는지 조회하는 로직
- 객체 단위로 optional로 받아주면 get으로 객체를 return할 수 있다
Optional<Reference> existReference = referenceRepository.findByTitle(title);
if(existReference.isPresent()){
return existReference.get();
}
2. 해당 값이 절대로 null이 아닌 경우
- 해당 값을 참조하는 순간에 NPE를 뱉는 것이 아닌 해당 코드가 발생하는 순간에 NPE를 뱉는다
public Page<Post> makeWebFeed(Pageable pageable) {
List<UserCategoryRelation> likedCategoryCodeList = userCategoryRelationRepository.findAllByUserId(SecurityUtil.getCurrentUserId());
Page<Post> webFeed = postRepository.findAll(pageable);
Optional.of(webFeed);
return webFeed;
}
추가로 Optional.of 경우 Static 메서드이기 때문에 따로 Optional 객체를 매번 생성하지 않아도 되는 이점이 존재한다.
Optional 객체를 참조하면 이런 메서드들이 나오는데 자세히 보면 of에 특정 값을 할당하면 null값인지 확인해주는 로직이다.
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
3. 특정 값을 null로 받아줘도 되는 상황
- 어떤 데이터가 null이 와도 괜찮다면 Optional.ofNullbale로 생성하면 된다.
만약에 일단 가져오기는하는데 바로 특정 값이 null일때 throw로 에러를 뱉게하고 싶다면 orElseThrow 메서드를 사용하면 된다.
private Long returnUserId(String userNickname) {
Optional<User> findUser = Optional.ofNullable(userRepository.findByNickname(userNickname));
return findUser.get().getId();
}
- 만약 특정 값이 없을때 빈칸을 return
private Long returnUserId(String userNickname) {
Optional<User> findUser = Optional.ofNullable(userRepository.findByNickname(userNickname));
findUser.orElse("");
return findUser.get().getId();
}
- 특정 값이 없을때 에러를 바로 뱉고싶다면
private Long returnUserId(String userNickname) {
Optional<User> findUser = Optional.ofNullable(userRepository.findByNickname(userNickname))
.orElseThrow(() -> new UnderlineException(ErrorCode.CANNOT_FOUND_USER));
return findUser.get().getId();
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 실시간클락
- 조회수기능
- 이미지검색
- 구글클라우드스토리지
- mockserver
- 목서버
- 주피터랩
- ChatGPT
- 소숫점잘림
- 알고있
- 구글
- 모의서버
- redis-py
- visionAPI
- redis
- 항해해커톤
- crudrepository
- 항해커톤
- 데이터잘림
- 조회수기능개발
- 빈해쉬맵
- 네이버이미지검색
- 시간어떻게
- redisTemplate
- 해커톤
- 스마트렌즈
- jupyterlab
- PC시간어떻게
- 지도데이터
- 실시간클록
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함