Optional이란?
Optional은 null일 수 있는 객체를 감싸는 Wrapper 클래스입니다.
주로 값이 존재할 수도, 존재하지 않을 수도 있는 상황에서 null을 직접 다루지 않고 안전하게 처리하기 위해 사용됩니다.
왜 사용할까?
개발자들이 가장 싫어하는 오류 중 하나가 바로 NullPointerException(NPE)입니다.
예를 들어, Repository에서 findById() 메서드를 통해 데이터를 조회할 때, 해당 ID에 해당하는 값이 없으면 null이 반환됩니다.
이런 경우, 아무런 체크 없이 null 객체에 바로 접근하면 NPE가 발생하게 됩니다.
Optional은 이런 상황을 방지하기 위해 사용되며, 값을 감싸는 형태로 존재 여부를 명시적으로 처리할 수 있게 도와줍니다.
주요 메서드
메소드 | 설명 |
isPresent() | 값이 존재하면 true, 존재하지 않으면 false를 반환합니다. |
isEmpty() | 값이 없으면 true, 존재하면 false를 반환합니다. (isPresent()의 반대) |
get() | Optional에 감싸진 실제 객체를 반환합니다. (값이 없을 경우 예외 발생 주의!) |
사용 예제
1. isPresent() 사용 예시
public User getUserById(Long id) {
Optional<User> optionalUser = userRepository.findById(id);
if (optionalUser.isPresent()) {
return optionalUser.get();
}
return null;
}
2. isEmpty() 사용 예시
public User getUserById(Long id) {
Optional<User> optionalUser = userRepository.findById(id);
if (optionalUser.isEmpty()) {
throw new RuntimeException("유저를 찾을 수 없습니다.");
}
return optionalUser.get();
}
권장하는 방법
Optional은 get() 사용을 지양하고, 아래와 같이 더 안전하게 처리하는 방식이 권장됩니다.
public User getUserByIdWithThrow(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("유저를 찾을 수 없습니다."));
}
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Scheduler (0) | 2025.05.01 |
---|---|
[Spring Boot] 파일 저장 시스템 (1) | 2025.04.26 |
[Spring boot] 프록시 객체(Proxy Object) (1) | 2025.03.29 |
[Spring Boot] 상속관계 매핑 전략 (0) | 2025.03.15 |
[Spring Boot] @PrePersist 어노테이션 (1) | 2025.02.18 |