예외처리(Exception Handling), 예외전파(Exception Propagation)

예외처리(Exception Handling), 예외전파(Exception Propagation)

예외처리

이전에 JSP를 배우면서 try~catch문으로 예외처리 하는 것을 배웠었다. 그래서 단지 try~catch문을 작성하면 예외를 처리하구나 라고 생각했는데, JAVA 언어를 배우면서 예외처리에는 총 2가지가 있다는 것을 알게되었다.

또한 우리가 만나보는(?) 예외는 주로 실행 단계의 예외이다.

예외 클래스에 대한 계층 구조도는 아래와 같다.

출처 : https://www.nextree.co.kr/p3239/

Object는 자바의 가장 기본적인 class여서 pass 한다고 치고, Java에서의 모든 예외는 Throwable 로부터 상속받는다.

Error 클래스는 시스템의 변화를 주어 처리하는 반면, Exception 클래스는 프로그래머가 로직을 추가하여 처리할 수 있는 예외이다. 두 차이는 아래와 같다.

출처 : 위와 같음

정리하자면, 2가지의 예외를 처리하는 기준은 JAVA에서 이미 명시된 예외이냐, 프로그래머가 직접 명시한 예외냐 이 차이다. 둘을 구분하는 기준은 이 예외가 다른 프로그램에서도 '무조건' 작동하는 예외인지, 다른곳에서는 예외가 아니지만 이 프로그램에서'만' 예외로 처리하는가를 기준으로 본다.

※ 예외도 객체로 보기 때문에, 반드시 예외 클래스에서 예외 객체 생성을 통해 예외를 처리해야 한다.

※ 프로그래머 정의 예외처리에서는 try~catch문을 이용하는데 주로 try는 1개로 쓰고, catch문은 여러 개로 생성이 가능하다.

※ 예외 변수의 경우 프로그래머 마음대로 사용 가능하다. ex) ArithmeticException a

예외전파

Propagation 이라는 단어는 이전에 AI 이론을 배울 때 '역전파 알고리즘'이란 것을 배운 적이 있었다.

'역전파(逆傳播, back Propagation)'라는 말 자체가 본래 방향에서 반대 방향으로 보낸다는 의미이다. 덧붙이자면, AI 기계학습에서 쓰이는 역전파 알고리즘도, 원하고자 하는 출력층의 데이터가 입력층에서 데이터를 보낼 때와 다르므로 거출력 > 은닉 > 입력 층으로 되돌아가면서 오차에 비례하여 가중치를 갱신하는 방법이다.

본론으로 넘어와서 예외전파는 예외가 발생한 곳에서 예외처리를 하지 않고 예외를 호출한 곳으로 넘겨주어 예외를 처리하는 것이다.

그렇다면 예외전파를 왜 사용하는 것인가? 예외전파를 통해 해당 프로그램에서 어떤 예외가 발생하고, 어떻게 예외 처리하는지 구조적으로 볼 수 있으며, 예외 처리에 관한 코드를 중복으로 작성하지 않아도 된다.

throws : 예외 발생 / throw : 예외 전파 키워드이니 헷갈리지 말 것.

※ 예외를 처리하고 나서 다음 문장을 실행하는 것이 아닌 예외를 처리한 시점에서 catch문을 빠져나와 예외와 무관한 문장이 있다면 그 문장을 실행하고 프로그램을 빠져나온다.

from http://brandycoding.tistory.com/86 by ccl(A) rewrite - 2021-09-16 04:27:20