본문 바로가기
TIL(Today I Learned)

[Java] 예외 처리와 예외 발생과 관련된 개념 정리

by kkkdh 2023. 1. 12.
728x90

오늘은 자바 기본 문법을 공부하며 알게 된, 예외 처리와 예외를 발생시키는 방법에 대해 공부한 과정을 정리해 보려고 합니다.


자바 예외 처리

자바는 코드 상에서 try, catch 구문을 이용해서 예외 처리 구문을 작성할 수 있습니다.

 

동작 방식을 간단히 정리하면, try 구문에 작성한 코드에서 에러가 발생하는 것을 감지하고, catch 구문에서 예외 처리를 다루는 구조로 동작합니다. 

 

catch 구문은 여러 개를 작성할 수 있는데, 이때 각각의 catch 구문에는 어떠한 에러를 다룰 것인지를 명시해 줘야 합니다. 그러면 각각의 오류에 맞는 catch 구문이 예외를 처리하는 구조를 띄게 됩니다.

예외 처리에 대한 예시 코드

위 코드와 같이 divide by zero 에러가 런타임에 발생하면, java.lang.ArithmeticException 예외가 "main" thread에서 발생하게 되는데, catch 구문에서 ArithmeticException 에러가 발생했을 때, 예외 처리를 진행할 코드를 등록해 놓으면 이 코드로 넘어가서 예외 처리를 진행하게 됩니다.

 

예외처리 코드 이후에는 try, catch 구문 이외의 남은 코드는 계속해서 실행됩니다.

ArrayIndexOutOfBoundsException error handling catch 구문을 추가

위의 예시 코드는 새로운 예외에 대한 예외처리 catch 구문을 추가한 예시입니다. 이 상황에서는 두 가지 예외 중에서 배열의 길이를 벗어나는 에러가 먼저 발생하기 때문에, 두 번째 catch 구문이 실행되고 이후에 예외처리 구문 밖의 코드가 이어서 실행될 것입니다.

예상대로 동작하죠??

이렇게 error의 toString method를 사용해서 에러의 원인을 간단하게 확인할 수도 있었습니다. (toString method는 실제 개발 시에도 매우 유용할 것 같습니다.)

try, catch를 이용한 예외 처리 과정 다이어그램을 간단하게 그려봤습니다.


자바 예외 발생

예외 처리를 하는 방법도 매우 중요하지만, 코딩을 하면서 예외를 발생시켜야 하는 상황이 있기 마련입니다. (의도대로 동작하는 프로그램을 구현하기 위함이지 않을까 생각합니다.)

 

발생한 예외를 던지는 방법으로는 먼저 throws를 활용하는 방법이 있다고 합니다.

 

앞서 정리한 try, catch 구문을 이용하면, 우리는 실행하는 메서드 내에서 발생하는 오류를 detecting 하고 예외 처리를 진행할 수 있었습니다. 

 

하지만, throws 예약어를 이용한 방법은 현재 메서드 내에서 오류를 처리하는 것이 아니라 메서드 내부 코드에서 에러가 발생했을 때, 메서드를 사용하는 곳으로 error를 던져서 책임을 전가하는 방식입니다.

 

본인이 예외를 처리하는 것이 아니라 발생한 예외를 메서드를 사용하는 곳으로 던지기 때문에, throws라는 이름이 붙은 게 아닐까 싶었습니다.

이렇게 나누기를 진행하는 코드를 따로 빼서, 메서드 실행 중 에러가 발생할 때, ArithmeticException 에러를 throws 하도록 구현해 봅시다.
main method를 이렇게 바꿔봅니다.

코드에서 변경된 점을 찾자면, divide by zero가 divide 메서드를 실행하는 상황에서 발생하고, 이전처럼 코드 실행 중에 try, catch를 이용한 예외 처리를 진행하는 것이 아니라 throws를 통해 메서드를 사용하는 곳으로 에러를 전가하게 됩니다.

 

main method는 예외를 전가받게 되고, 이에 따라서 main method에서 try, catch 구문을 이용해 예외 처리를 진행합니다.

코드 실행 결과는 예상과 같습니다!!

throws 뿐만 아니라 throw라는 것도 존재합니다.

 

둘이 's' 하나 차이라 유사해 보이지만, 기능에는 엄연한 차이점이 존재합니다.

 

throws는 메서드에서 발생한 에러를 전가시키기 위해서 사용한다면, throw실행 즉시에 예외를 발생시킬 때 사용합니다.

 

무슨 말인지는 코드를 보면, 더 이해하기 쉬울 것 같습니다.

throw를 이용해 error를 직접 발생시키고, throws로 예외 발생시 예외를 사용하는 메서드로 전가시킨다.
main method에서는 error 처리를 진행

이렇게 코드를 짜보면, 실행 결과는 다음과 같습니다.

인자로 넘겨준 error string이 정상적으로 출력

이렇게 throw의 사용방법까지 정리해 봤습니다. 

 

Error를 생성할 때, 인자로 error message를 넘겨주고, 이걸 toString() method를 이용해서 출력할 수 있는 점까지 추가로 공부할 수 있었습니다!


References

https://m.blog.naver.com/highkrs/220238284097

 

[Java 강의22] 자바 예외처리 (try, catch, finally)

안녕하세요. 모프 입니다. 오랜만에 강의네요 ㅎㅎ 오늘은 자바의 가장 좋은 기능중 하나인 예외처리(excep...

blog.naver.com

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=highkrs&logNo=220239297118 

 

[Java 강의23] 자바 예외발생 (throw, throws)

안녕하세요 모프 입니다. 어제 강의는 예외를 처리하기만 했죠. 오늘은 예외를 발생시키는 방법을 알아보도...

blog.naver.com

https://www.javatpoint.com/try-catch-block

 

Java try-catch - javatpoint

Java try-catch block. Let's see what is try and catch block and how can we write a simple program of exception handling

www.javatpoint.com

 

728x90

댓글