Optional이란

주요 메서드

실전 Optional 적용 예제

public Optional<User> findById(Long id) {
	return userRepository.findById(id);
}

Optional<user> optionalUser = findById(id);
User user = optionalUser.getOrElseThrow(() -> new DataNotFoundException("회원을 찾을 수 없습니다"));

Optional 사용 시 주의 사항

항목 설명
❌ 필드에 사용 X 클래스의 필드로 Optional을 선언하지 말 것 (Optional<User> userUser user)
어떤 시점에 존재 여부가 명확하지 않은 값을 안전하게 다루기 위한 도구이지 객체의 상태를 표현하기 위한 용도가 아님
❌ 컬렉션 내부에 사용 X List<Optional<T>>보다 List<T> 자체를 빈 리스트로 처리
get() 직접 호출 자제 예외 발생 가능성 높음, orElse, orElseThrow, ifPresent 사용 권장
❌ Serializable이 아님 직렬화가 필요한 경우 주의(JSON, JPA, 캐시 등을 사용하려고 하면 예외가 발생하거나 예상치 못한 동작 가능성 주의)

Optional 사용이 좋은 상황