이번에는 자바 예외처리에 대해 한번 알아보자
먼저 에러가 발생하는 상황을 한번 만들어 봐야겠는데
call 메소드는 2를 받아온 파라미터로 나눈다
근데 파라미터가 0이라면?
2로 0을 나눌 수는 없지 않은가
실행해보면 당연하게도 이렇게 에러가 뜬다
이러한 에러를 적절하게 처리하는 것을 예외처리라고 한다
먼저 try catch를 이용해 예외처리를 하는 방법을 알아보자
try {
수행할 내용
} catch (에러종류) {
catch에 설정한 에러에 걸렸을 시 수행할 문장
} finally {
에러와 상관없이 수행할 내용
}
이런 식으로 구성되는데
try 하단에서 주어진 내용을 수행하다가
에러가 발생하면 종류에 따라 catch 문으로 이동해서
에러 걸렸을 때 지정한 내용을 수행한다
이후 finally는 달아도 되고 안달아도 되는데
do while의 do 처럼 에러가 나건 말건 간에 무조건 수행하는 문장이다
catch 에서 에러 종류가 뭐가 뜰지 잘 모르는 경우에는
그냥 Exception을 사용해도 되는데 예외처리에서 제일 상위에 있는 것이
Exception이기 때문에 Exception으로 모든 예외 처리가 가능하다
이후에 실행을 해 보면..
똑같이 0으로 나누므로 에러가 발생하지만
이번에는 catch를 통해 예외처리를 해 놓았으므로
출력이 제대로 되는 것이 보인다
try catch를 통한 예외처리를 해봤으니
이번에는 throws를 통한 예외처리를 알아보자
throws는 해당 메소드에서 예외처리를 하는 것이 아니라
그 메소드를 부른 곳으로 던질 테니까 거기서 예외 처리를 하라는 말이다
즉 call 메소드는 main 메소드에서 불렀으니까
예외처리는 main method에서 하면 된다는 말이다
throws를 쓴다고 try catch문을 안쓰는 건 아니고
똑같이 쓰는데 쓰는 위치가 throws를 통해 바뀌게 된다
출력을 해 보면
2를 0으로 나눌 수 없는 만큼 예외처리가 되어
아까와 똑같은 결과가 나오는데
throws를 사용하지 않으면 해당 메소드에서 예외처리를 해야하고
throws를 사용하면 그 메소드(call)를 사용하는 메소드(main)에서 예외처리를 하면 된다
마지막으로는 throw를 통한 예외처리인데
throw는 Exception에서 제공하는 예외처리 말고도
내가 특정 경우에 예외처리를 하고 싶을때 사용하는데
throw new 예외클래스명(); 으로 사용한다
예외 클래스명이라고 한 이유가
이게 똑같이 throw new CustomException(); 를 쓰면 에러가 뜬다
왜냐면 CustomException 이라는 예외처리는 없기 때문이다
저렇게 이름을 지어 사용하려면 새로 클래스를 만들어야 하는데
CustomException으로 클래스를 만든 후 Exception을 상속받으면
예외처리 중의 하나로 인식이 되어 에러가 발생하지 않게 된다
이 경우에는 CustomException 클래스에서
생성과 동시에 CustomException 에서 예외 처리!! 를 삽입하여
CustomException에 해당하는 예외 발생시에는
CustomException 에서 예외 처리!! 가 출력될 것이다
이제 출력을 한번 해 보면..
CustomException을 통해 예외 처리가 잘 되는 것이 보인다
이제 예외처리에 대해 정리해 보자면
일단 예외처리는 try catch 문을 통해 처리하는거고
catch() 안에 Exception을 넣으면 모든 종류의 예외를 처리할 수 있고
특정 종류의 예외 처리만 원한다면 ArithmeticException 처럼 따로 넣어주면 된다
catch 문은 여러번 넣을 수 있어서 여러 종류의 예외처리에 대응할 수 있다
그리고 throws는 예외처리를 해당 메소드가 아니라
그 메소드를 부른 메소드에서 처리하는 건데
try catch 문을 부른 메소드에 작성하는 것이다
마지막으로 throw는 사용자 정의의 예외처리를 작성하는 것인데
사용하기 위해서는
클래스를 작성한 후 Exception을 상속받은 후에
throw new 클래스명(); 으로 사용이 가능하다
'IT > Java' 카테고리의 다른 글
자바 접근제어자(Access Modifier) (0) | 2019.01.30 |
---|---|
자바 getter, setter 알아보기 (4) | 2019.01.26 |
자바 ==와 equals() 차이 알아보기 (0) | 2019.01.23 |
자바로 구구단 만들어보기 (0) | 2019.01.22 |
자바 오버로딩(Overloading) 알아보기 (0) | 2019.01.22 |
댓글