Optional 클래스의 사용

CosmoNumb·2024년 7월 23일
0

java

목록 보기
15/24

이번 글의 내용 설명을 위해, 현재 풀이할 studentRepository.findById(id).orElse(null) 코드는 데이터베이스에서 특정 ID에 해당하는 학생을 조회하는 과정에서 사용되는 코드의 예시입니다. 이 구조가 왜 필요한지 설명하도록 하겠습니다.

주요 개념

  1. studentRepository.findById(id):

    • findById(id) 메서드는 JpaRepository 인터페이스에서 제공하는 메서드로, 주어진 ID를 기반으로 데이터베이스에서 해당 엔티티를 찾습니다.
    • 이 메서드는 결과를 Optional<Student>로 반환합니다. Optional은 자바 8에서 도입된 클래스로, 값이 있을 수도 있고 없을 수도 있는 상황을 표현합니다.
  2. Optional 클래스:

    • Optional은 값이 존재하지 않을 경우를 안전하게 처리하기 위해 사용됩니다. 직접 null을 반환하거나 처리하는 것보다 코드의 안전성을 높입니다.
    • Optional의 주요 메서드 중 하나는 orElse입니다. orElseOptional에 값이 있으면 그 값을 반환하고, 값이 없으면 지정한 기본 값을 반환합니다.

코드 구조 설명

public Student getStudentById(Long id) {
    return studentRepository.findById(id).orElse(null);
}

이 코드를 한 줄씩 살펴보겠습니다:

  1. studentRepository.findById(id):

    • studentRepository는 데이터베이스와 상호작용하는 레포지토리 객체입니다.
    • findById(id) 메서드는 데이터베이스에서 주어진 ID에 해당하는 학생을 찾습니다. 이 메서드는 Optional<Student>를 반환합니다.
  2. .orElse(null):

    • Optional<Student>에서 orElse(null)를 호출합니다. Optional이 비어 있으면 즉, 주어진 ID에 해당하는 학생이 데이터베이스에 없으면 null을 반환합니다.
    • 만약 Optional이 비어 있지 않다면, 즉 주어진 ID에 해당하는 학생이 존재한다면 그 학생 객체를 반환합니다.

왜 이런 구조를 사용하는가?

  1. Null 안전성:

    • Optional을 사용하면 null을 직접 다루는 것보다 더 안전하게 값을 처리할 수 있습니다. 예를 들어, 값이 없을 경우를 명시적으로 처리할 수 있습니다.
  2. 코드 가독성:

    • orElse(null)를 사용하면 값이 없을 때 기본값을 지정하는 로직이 명확해집니다. 코드를 읽는 사람에게 값이 없을 때 어떤 일이 발생하는지 명확히 보여줍니다.
  3. 일관된 방법:

    • 데이터베이스에서 값을 조회할 때, 값이 없을 경우를 처리하는 일관된 방법을 제공합니다.

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을 사용하면 값이 없을 때 발생할 수 있는 여러 상황을 유연하게 처리할 수 있습니다.

0개의 댓글