💡 개요
오늘은 자바에서 사용되는 Optional에 대해 정리해 보자.
🛠️ Optional
Optional이란 자바에서 NullPointException을 방지하기 위해 사용되는 타입이다.
보통 JPA을 사용해 엔티티를 조회할 때 Optional로 엔티티를 한번 감싸고 사용하면, 더 안전하게 객체를 다룰 수 있다.
Optional<Member> findMember = memberRepository.findByEmail(email);
⚙️ Optional 제공 메서드
Optional에는 다양한 메서드가 제공된다.
📌 생성 관련
메서드 | 설명 |
Optional.of(value) | 절대 null이 아닌 값을 포함한 Optional 생성 (null이면 NullPointerException) |
Optional.ofNullable(value) | 값이 null일 수도 있는 Optional 생성 |
Optional.empty() | 비어있는 Optional 생성 |
📌 값 확인 및 처리
메서드 | 설명 |
isPresent() | 값이 존재하면 true |
isEmpty() (Java 11+) | 값이 없으면 true |
ifPresent(Consumer) | 값이 존재하면 해당 Consumer 실행 |
ifPresentOrElse(Consumer, Runnable) (Java 9+) | 값이 있으면 Consumer 실행, 없으면 Runnable 실행 |
📌 값 꺼내기
메서드 | 설명 |
get() | 값 꺼냄 (값이 없으면 NoSuchElementException) |
orElse(T other) | 값이 있으면 반환, 없으면 other 반환 |
orElseGet(Supplier) | 값이 있으면 반환, 없으면 Supplier 실행 결과 반환 |
orElseThrow() | 값이 없으면 예외 발생 (NoSuchElementException) |
orElseThrow(Supplier) | 값이 없으면 Supplier에서 제공한 예외 발생 |
참고로 Optional.get() 은 웬만하면 사용하지 않는 것을 추천한다.
만약 사용해야 한다면 get() 직전에 Optional의 null 여부를 판별한 이후 사용하도록 하자.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.05.15 - 클래스마다 무조건 인터페이스를 생성?? (0) | 2025.05.15 |
---|---|
[개발 일기] 2025.05.14 - ConfigurationProperties와 Setter (0) | 2025.05.14 |
[개발 일기] 2025.05.12 - 분산 저장 (파티셔닝, 샤딩) (0) | 2025.05.12 |
[개발 일기] 2025.05.11 - Redis 만료 원리 (0) | 2025.05.11 |
[개발 일기] 2025.05.10 - Bulk을 사용한 저장이 하나씩 저장하는 것 보다 빠른 이유 (0) | 2025.05.10 |