반응형
❓ Optional<T>
- Java8에 새로 추가된 API
- 프로그램 실행과정에서 발생하는 NullPointerException을 피하기 위한 API
- null이 올 수 있는 값을 감싸는 Wrapper 클래스
- 프로그램의 실행결과로
Optional<T>
를 반환하면 언제나 null이 아닌 객체를 반환할 수 있어서 NullPointerException을 피할 수 있다. Optional<T>
는 클래스이기 때문에 다양한 메소드를 제공한다.
💡 예시
// 값이 null인 Optional 객체 생성하기
Optional<User> optional = Optional.empty();
boolean present = optional.isPresent(); // present : false
boolean empty = optional.isEmpty(); // empty : true
// 값이 있는 Optional 객체 생성하기
User user = new User();
Optional<User> optional = Optional.of(user);
boolean present = optional.isPresent(); // present : true
User user = optional.get(); // get() 메소드는 Optional객체에 저장된 값을 반환한다.
// isPresent()가 true일 때만 사용하자.
✔️ 주요 API
static <T> Optional<T> empty()
- null이 저장된 Optional객체가 반환된다.
- null이 저장된 Optional객체가 반환된다.
static <T> Optional<T> of(T value)
- null이 아닌 value객체가 저장된 Optional객체가 반환된다.
- null이 아닌 value객체가 저장된 Optional객체가 반환된다.
static <T> Optional<T> ofNullable(T value)
- value는 null일 수도 있고 null이 아닐 수도 있는 값이 저장된 Option객체가 반환된다.
- value는 null일 수도 있고 null이 아닐 수도 있는 값이 저장된 Option객체가 반환된다.
boolean isEmpty()
- Optional객체에 null이 저장되어 있으면 true를 반환한다.
- Optional객체에 null이 저장되어 있으면 true를 반환한다.
boolean isPresent()
- Optional객체에 null이 아닌 값이 저장되어 있으면 true를 반환한다.
- Optional객체에 null이 아닌 값이 저장되어 있으면 true를 반환한다.
T get()
- Optional객체에 저장된 값을 반환한다.
- Optional객체에 저장된 값을 반환한다.
T orElse(T other)
- Optional객체에 객체가 저장되어 있으면 그 객체가 반환되고, null이 저장되어 있으면 other에 해당하는 객체가 반환된다.
- Optional객체에 객체가 저장되어 있으면 그 객체가 반환되고, null이 저장되어 있으면 other에 해당하는 객체가 반환된다.
여러 건을 조회할 때 반환값 :
List<T>
-> 객체가 비어있어도 그냥 비어있는 List가 반환됨
한 건을 조회할 때 반환값 :Optional<T>
-> 객체가 비어있으면 null이 나올 수 있기 때문에
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-Optional
'BackEnd > Spring' 카테고리의 다른 글
[Spring] Spring Data JPA 설정 - 정의한 JPA Entity 클래스로 테이블 자동 생성되도록 설정하기 (1) | 2025.01.18 |
---|---|
[Spring] Spring Data JPA 연관관계 어노테이션 @ManyToOne (0) | 2025.01.18 |
[Spring] JUnit 단위테스트 (0) | 2025.01.18 |
[Spring] JPA(Java Persistence API)와 Spring Data JPA (0) | 2025.01.18 |
[Spring] Thymeleaf 타임리프 (+JSP 비교) (0) | 2025.01.18 |