인프런 커뮤니티 질문&답변
예외처리
작성
·
457
1
package hello.exception.servlet;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Slf4j
@Controller
public class ServletExController {
@GetMapping("/error-ex")
public void errorEx() {
throw new RuntimeException("예외 발생!");
}
}
이코드에서 강사님이 Exception이 터지면 was까지 간다고 설명하셧는데
package hello.exception.servlet;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Slf4j
@Controller
public class ServletExController throws RuntimeException {
@GetMapping("/error-ex")
public void errorEx() {
throw new RuntimeException("예외 발생!");
}
}
이런식으로 throws RuntimeException 으로 예외전가를 해줘야한다고 저는 자바 배울 때 배웟는데
예외전가를 안해도 상위로 계속 올라가서 was까지 올라가는 건가요??
답변 2
2
저도 공부중인데. 아마 런타임 예외 계열은 throws를 안해도 자동적으로 넘어갑니다.
throws가 checked 예외들을 적어주고, 필요하다면(적지 않아도 로직에는 문제 없지만, 사용하는 사람에게 이런 예외가 발생할 수 있다는 사실을 알려주고 싶을 때) Runtime 계열이라도 적어주는거지 기본적으로는 runtime 계열 에외는 안적는걸로 알아요.
그래서 스프링에선 Repository관련 에러도 checked 예외(throws를 해줘야하는 예외, 종속성의 문제가 생김)을 DataAccessException(Runtime 예외를 상속 받은 예외, unchecked 예외)로 바꿔서 thorws를 제거할 수 있게 해줘서 종속성 문제를 해결한거고요.
결론적으론 RuntimeException은 throws를 안해도 계속 상위로 올라가는 예외인거죠





