준준의 기록일지

[Java] try/catch 문 "고의" 예외처리를 통한 flow 확인 본문

개발 전체

[Java] try/catch 문 "고의" 예외처리를 통한 flow 확인

junjunwon 2020. 10. 14. 10:36

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."




try/catch문 사용법이나 다중 catch문에 대해서는 어느정도 이해했는데, 함수를 타고 클래스를 돌아다니다가 예외가 발생하면 어떻게 처음 클래스 함수로 돌아오는지 확인하고자 글을 작성했다.

 

업무를 하다 보니 catch문에 대한 이해도가 필요한 순간이 많았다.

현재 회사 관리 포탈 agent 버전이 2.3.1인데,

고객사 VM에 설치한 agent  버전이 2.2.1이라면, 버전 오류가 생길 수 있다.

해당 관리 포탈이랑 VM이랑 agent를 통한 소켓 포트통신을 할 경우 버전이 다르다고 해서 에러로그를 발생시키는게 아니라 버전 문제에 따른 팝업이 고객사 관리자에겐 더 필요할 것이다. 이때 SocketTimeoutException e라는 catch문을 FutureTask 내부에 추가하고, throw e를 날려 호출한 이전 클래스에 같은 exception으로 날려주는 방식! 

해당 내용은 본인이 나중에 보기 위해 작성한 글로 catch문에 대한 예시는 아래에 간단히 설명하겠다.

 

temp.class try/catch문 (메소드 : main)

       ↓ 호출          ↑ return

temp2.class try/catch문 (메소드 : t2)

       ↓ 호출          ↑ return

temp3.class try/catch문 (메소드 : t3)

 

temp.class

temp2.class

temp3.class

일 경우, main -> t2 -> t3 순으로 메소드를 호출한다. 

이때 만약 t3에서 exception이 발생하면 어떻게 될까?

exception 발생 확인을 위해 

Exception e = new Exception("고의");

throw e;

로 e를 throw했다.

이렇게 하면 temp3.test3에 catch문 Exception e로 넘어간다.

이후 출력문 출력 후 이전 호출 메소드에 같은 Exception catch문으로 넘어간다.

또 명령 실행 후 throw e

 

이와 같이 같은 캐치문을 통해 첫번째 호출 메소드까지 넘어가서 catch문을 종료한다.

만약 같은 exception이 없다면??? type에러 발생! -> 즉 같은 catch exception이 호출된 구문에선 존재해야됨.

 

다른 참고 

webclub.tistory.com/71

 

예외 처리 - throw 및 try/catch/finally

throw & try/catch/finally(Exception Handling) 이 글에서는 예외 처리 방식에 대해 알아봅니다. 프로그램이 실행되는 동안 문제가 발생하면 프로그램이 자동으로 중단됩니다. 이럴 경우에 프로그램이 대처

webclub.tistory.com