이번 글의 내용 설명을 위해, 현재 풀이할 studentRepository.findById(id).orElse(null)
코드는 데이터베이스에서 특정 ID에 해당하는 학생을 조회하는 과정에서 사용되는 코드의 예시입니다. 이 구조가 왜 필요한지 설명하도록 하겠습니다.
studentRepository.findById(id)
:
findById(id)
메서드는 JpaRepository
인터페이스에서 제공하는 메서드로, 주어진 ID를 기반으로 데이터베이스에서 해당 엔티티를 찾습니다.Optional<Student>
로 반환합니다. Optional
은 자바 8에서 도입된 클래스로, 값이 있을 수도 있고 없을 수도 있는 상황을 표현합니다.Optional
클래스:
Optional
은 값이 존재하지 않을 경우를 안전하게 처리하기 위해 사용됩니다. 직접 null을 반환하거나 처리하는 것보다 코드의 안전성을 높입니다.Optional
의 주요 메서드 중 하나는 orElse
입니다. orElse
는 Optional
에 값이 있으면 그 값을 반환하고, 값이 없으면 지정한 기본 값을 반환합니다.public Student getStudentById(Long id) {
return studentRepository.findById(id).orElse(null);
}
이 코드를 한 줄씩 살펴보겠습니다:
studentRepository.findById(id)
:
studentRepository
는 데이터베이스와 상호작용하는 레포지토리 객체입니다.findById(id)
메서드는 데이터베이스에서 주어진 ID에 해당하는 학생을 찾습니다. 이 메서드는 Optional<Student>
를 반환합니다..orElse(null)
:
Optional<Student>
에서 orElse(null)
를 호출합니다. Optional
이 비어 있으면 즉, 주어진 ID에 해당하는 학생이 데이터베이스에 없으면 null
을 반환합니다.Optional
이 비어 있지 않다면, 즉 주어진 ID에 해당하는 학생이 존재한다면 그 학생 객체를 반환합니다.Null 안전성:
Optional
을 사용하면 null을 직접 다루는 것보다 더 안전하게 값을 처리할 수 있습니다. 예를 들어, 값이 없을 경우를 명시적으로 처리할 수 있습니다.코드 가독성:
orElse(null)
를 사용하면 값이 없을 때 기본값을 지정하는 로직이 명확해집니다. 코드를 읽는 사람에게 값이 없을 때 어떤 일이 발생하는지 명확히 보여줍니다.일관된 방법:
Optional
의 다른 사용 방법Optional
클래스는 orElse
외에도 다양한 메서드를 제공합니다:
orElseGet(Supplier<? extends T> other)
: 값이 없을 때 기본값을 반환하는 대신, 다른 값을 계산하는 함수를 제공합니다.
return studentRepository.findById(id).orElseGet(() -> new Student());
orElseThrow(Supplier<? extends X> exceptionSupplier)
: 값이 없을 때 예외를 던집니다.
return studentRepository.findById(id).orElseThrow(() -> new EntityNotFoundException("Student not found"));
isPresent()
: 값이 존재하는지 확인합니다.
Optional<Student> optionalStudent = studentRepository.findById(id);
if (optionalStudent.isPresent()) {
return optionalStudent.get();
} else {
return null;
}
이러한 다양한 메서드를 통해 Optional
을 사용하면 값이 없을 때 발생할 수 있는 여러 상황을 유연하게 처리할 수 있습니다.