점프투 스프링부트(2-05)를 공부하던중 findById를 통해 데이터를 조회하는 리포지터리의 메서드를 사용하면서 [Optional]은 무엇인가 궁금해졌다.
(왜 객체를 저렇게 받는거지..?) 라고 생각했다.
알아보자!
Optional은 null 처리를 유연하게 처리하기 위해 사용하는 클래스라고 한다.
즉, NPE 발생을 방지하기 위함이다.
*NPE(NullPointerException) 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생하는 예외다.
id값을 조회할때 객체가 없을경우(Null)를 방지하고자 Optional 클래스를 사용하여 아래와 같이 isPresent로 null이 아닌지를 확인한 후에 get으로 실제 Question 객체 값을 얻어야 한다.
@Test
void testJpa() {
Optional<Question> oq = this.questionRepository.findById(1);
if(oq.isPresent()) {
Question q = oq.get();
assertEquals("sbb가 무엇인가요?", q.getSubject());
}
}