Exception / try-catch

김지원·2023년 8월 17일

오류 터질수도 있는곳 예상되는 곳 드래그해서 알트+엔터 trycatch 로 감싸기

트라이+캐치에 +finally로 오류나든 안나든 무조건 실행되는거 추가가능


throw new Exception();
오류 강제로 터트려야될때


RuntimeException(Unchecked Exception)
런타임에 나는 오류(빨간줄 안뜨는거(상황따라 터질수도있고 안터질수도있으니까))

당연히 NullPointerException도 RuntimeException에 속함


CheckedException
컴파일시 나는 오류(빨간줄 뜨는거)
코드작성시에 vscode에서 빨간줄로 표시해주니까 그때만 잡으면 되서 크게 신경 안써도 됨


메서드명에 throws Exception : 나를 호출한 메서드로 떠넘기기(메서드 전체에 트라이캐치문을 건거와 같음)

스프링에선 레파지토리>서비스>컨트롤러>디스패처서블릿으로 넘겨질거임
(디스패쳐서블릿이 클라이언트 요청을 파싱해서 컨트롤러 메서드를 찾아주니까)

메서드 각각마다 throws Exception 안붙혀도,
오류 난곳에서 throw로 넘겼는데 그걸 호출한 메서드에서 처리안하면, 자동으로 또 호출한 메서드로 넘김
(서비스에서 오류인데 컨트롤러에서 아무런 에러관련 처리가 없어도 자동으로 디스패쳐서블릿으로)


throw 키워드는 예외를 직접 생성하여 던지는 데 사용됩니다.
개발자가 직접 예외를 발생시켜야 할 때 사용됩니다.
throw 키워드 다음에는 예외 객체가 올 수 있습니다.
일반적으로 예외 객체의 생성자를 호출하여 예외 객체를 생성하고, throw 키워드를 사용하여 예외를 발생시킵니다.
예시: throw new SomeException("An error occurred");

throws 키워드는 메서드 선언부에서 사용되며, 해당 메서드에서 발생할 수 있는 예외를 명시적으로 선언하는 데 사용됩니다.
메서드가 어떤 종류의 예외를 던질 수 있는지를 사용자에게 알려주는 역할을 합니다.
throws 키워드 뒤에는 메서드에서 던질 예외 클래스를 나열합니다.
여러 예외를 나열할 때는 쉼표로 구분합니다.
예시: public void someMethod() throws IOException, SQLException

throw는 에러를 고의로 발생시킬 때 / 메서드 { } 내부에서 사용
throws는 자신을 호출한 상위 메소드로 에러를 던질때 / 메서드 선언부에서 사용


    public void 삭제하기(Integer id) throws Exception {
        boardRepository.deleteById(id);
    }

메서드명에 throws Exception로 떠넘겨도 되긴 하지만,
코드가 길어지면 어떤 줄에서 어떤 오류가 떴는지 명확하지 않으니까 비추천



    public void 삭제하기(Integer id) {
        try {
            boardRepository.deleteById(id);
        } catch (Exception e) {
            throw new RuntimeException("없는 게시글 id로 찾음");
        }
    }

이런식으로 명확하게 해서 나를 호출한 메서드로 떠넘기기


RuntimeException e = new RuntimeException("없는 게시글 id로 찾음");

이게 전달된거와 같음


@RestControllerAdvice
public class MyExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    public String error(RuntimeException e) {
        return Script.back(e.getMessage());
    }
}

디스패처서블릿에 직접 에러처리를 할 수 없으니까
스프링 문법대로 해서 에러관련 만든거

@ControllerAdvice에서 @ExceptionHandler 사용
@ControllerAdvice는 @Controller와 handler에서 발생하는 에러들을 모두 잡아준다.
@ControllerAdvice안에서 @ExceptionHandler를 사용하여 에러를 잡을 수 있다.

https://www.youtube.com/watch?v=nyN4o9eXqm0&list=PLlTylS8uB2fBOi6uzvMpojFrNe7sRmlzU&index=18&ab_channel=%EC%96%B4%EB%9D%BC%EC%9A%B4%EB%93%9C%ED%97%88%EB%B8%8C%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-AroundHubStudio

profile
https://github.com/k7850

1개의 댓글