본문 바로가기
깨알정보

자바 예외처리 파헤치기, Exception

by 에레메쓰 2021. 3. 13.
반응형

안녕하세요. 에레메쓰입니다 :) 한번 프로그래밍에 대해서 작성하려 하는데요. 자바 예외처리에 대해 한번 알아볼게요.

 

에러가 발생되는 로직을 만들어야 되는데 call 메서드는 2를 받아온 파라미터로 나눕니다. 근데 파라미터가 0이라면 2로 0을 나눌 수 없지 않은가요? 이런 예외 처리문을 만듭니다.

 

자바-에러발생-결과
에러발생

실행하면 당연히 에러가 뜨는데 이런 에러를 적절하게 처리해 주는 것을 예외처리라고 합니다. 먼저 "try carch"를 이용해서 예외처리 하는 방법을 알아볼게요.

 

자바-예외처리로직-트라이캐취
예외처리 로직(try catch)

try {

수행 내용

} catch (에러 종류){

catch에 설정한 에러에 충족했을 때 수행 조건(문장)

} finally {

에러 충족조건에 상관없이 수행할 내용

}

 

이런 식으로 구성되는데 try "수행 내용"에서 정상적으로 실행되다가 에러에 충족되었을 때 catch 문으로 이동해서 지정한 내용을 수행합니다. finally는 달아도 되고 안 달아도 크게 문제는 없는데 do while의 do 문처럼 에러가 나거나 안 나든 간에 수행하는 문장입니다. 여기서 에러 종류에 대해서 잘 모르면 그냥 Exception을 통해 처리해도 되는데 예외처리에서 제일 위에 있는 것이 Exception 이기 때문에 Exception으로 모든 예외처리가 가능합니다. 이후 실행해보면 0으로 나누므로 에러가 발생되지만 catch를 통해 예외처리를 적용했으므로 출력이 정상적으로 처리되는 것이 보입니다.

 

자바-예외처리로직-트라이캐취-실행결과
예외처리 로직(try catch)-결과

try catch를 이용하여 예외처리를 적용했으니 이번에는 throws를 통한 예외처리를 알아보도록 할게요. throws는 해당 메서드 안에서 예외처리하는 것이 아니라 그 메서드를 호출한 곳으로 던질 테니깐 그쪽에서 예외를 처리하도록 하는 것입니다. 즉, call 메서드는 메인 메서드에서 불렀으니 예외처리는 main method 안에서 처리하며 된다는 말입니다. throws를 쓴다고 try catch문을 쓰지 않는 것은 아니고 동일하게 쓰는데 위치가 throws를 통해 바뀌게 됩니다.

 

자바-예외처리로직-쓰로우스
예외처리 로직(throws)

출력을 해보면 2를 0으로 나눌 수 없기 때문에 예외처리되어 이전과 동일한 결과가 나오는데 throw를 사용하지 않으면 해당 메서드 안에서 예외처리를 해야 하나, throws를 사용하면 해당 메서드(call)를 사용하는 메인 메서드(mail)에서 예외처리를 하면 됩니다.

 

자바-예외처리로직-쓰로우스-결과
예외처리 로직(throws)-결과

마지막으로는 throw를 통한 예외처리인데 Exception에서 제공하는 예외처리 외 특정하게 예외 처리하고 싶을 때 사용됩니다.

 

자바-예외처리로직-쓰로우
예외처리 로직(throw)

 

"throw new 예외 클래스명()"으로 사용되는데요. 예외 클래스 명인 이유가 throw new CustomException();를 쓰면 에러가 발생돼요. 그 이유는 CustomException이라는 예외처리는 없기 때문이에요. 따라서, 이와 같이 이름을 지어 사용하려면 새로운 클래스들을 만들어야 하는데... CustomException으로 클래스를 만들어 상속(Exception) 받으면 예외처리로 인식되어 에러가 발생되지 않습니다.

 

자바-예외처리로직-커스텀클래스-쓰로우
예외처리 로직(throw)-2

 

이 경우 CustomException 클래스에서 생성함과 동시에 CustomException 내 "예외처리!!"를 삽입하면 CustomException에 해당되는 예외가 발생되는 경우 "예외 처리!!"가 출력될 것입니다. 출력 시 CustomException을 통해서 예외 처리가 잘 되는 것이 보입니다. 

 

자바-예외처리로직-쓰로우-결과
예외처리 로직(throw)-결과

 

정리하면, 예외 처리는 try catch를 통해 처리하는 것이고, catch() 안에 Exception을 넣으면 어떠한 종류의 예외를 처리할 수 있습니다. 특정 종류의 예외 처리만을 원한다면 ArithemticException처럼 별도로 넣어주면 됩니다. catch 문은 여러 개 넣을 수 있어서 여러 종류의 예외를 처리할 수 있습니다.  그리고 throws는 메서드를 부른 메서드에서 예외를 처리하고 throw는 사용자 정의에 대한 예외를 처리하는데 임의의 클래스를 생성한 후 Exception을 상속받은 뒤 "throw new 클래스명();"으로 사용이 가능합니다.

 

 

 

댓글