예외 처리의 설계 이슈

처리가 끝나면, 예외가 난 자리로 돌아가야 할까?

화면을 누르면 다음 장으로 넘어갑니다

설계 이슈

설계자가 답해야 하는 질문 다섯

예외 처리를 언어에 넣으려면 이 다섯 가지를 정해야 합니다. 언어마다 답이 다릅니다. 이 편에서 하나씩 그림으로 보고, 4편부터 언어별 답을 봅니다.

바인딩(binding)은 4강에서 본 '묶는 것'입니다. 여기서는 발생한 예외를 그것을 맡을 처리기와 잇는 일입니다.

① 범위 ② 바인딩

처리기에는 맡은 구역이 있습니다

처리기는 코드의 한 구역에 붙여 적고, 그 구역에서 난 예외만 맡습니다. 구역 안에서 예외가 나면 언어가 그 예외를 맞는 처리기에 묶습니다.

예외 A, B는 예시 이름입니다. 무엇을 보고 맞는 처리기를 고르는지는 언어마다 다릅니다.

③ 정보 전달

예외는 정보를 들고 갑니다

처리기가 제대로 조치하려면 무엇이 잘못됐는지 알아야 합니다. 그래서 예외와 함께 정보를 처리기로 넘길 수 있게 할지도 정합니다.

"bad parameter"(잘못된 매개변수)는 루비 예제에 나오는 메시지입니다. backtrace는 예외가 지나온 호출 경로를 알려 줍니다.

④ 계속

돌아갈까, 이어 갈까

처리기가 끝난 뒤 실행이 어디서 이어지느냐는 문제입니다. 예외가 난 자리로 되돌아가는 방식이 재개(resumption)이고, 되돌아가지 않고 처리기 다음에서 이어 가는 방식이 종료(termination)입니다.

이 강의가 따르는 교재는 이 문제를 계속(continuation)이라고 부릅니다. C++는 종료 방식입니다(5편).

⑤ 마무리

건너뛰면 안 되는 줄이 있습니다

종료 방식에서는 예외가 난 줄 아래가 실행되지 않아, 거기 있던 뒷정리도 빠집니다. 그래서 무슨 일이 있어도 실행할 코드를 적는 자리를 따로 두기도 합니다. 이것이 마무리(finalization)입니다.

파일 열기와 닫기는 예시입니다. 자바의 마무리는 7편에서 봅니다.

그 밖의 질문

예외 자체에 대해서도 정합니다

예외 자체에 대해서도 정할 것이 있습니다. 프로그래머가 예외를 새로 정의할 수 있는지, 언어가 미리 정의해 둔 예외가 있는지 같은 것들입니다.

기본 처리기는 프로그램이 처리기를 마련하지 않은 예외를 언어가 대신 받아 주는 처리기입니다.

다음 편

이 질문들에 C++가 내놓은 답부터 봅니다

4편C++는 처리기를 어떻게 고를까? 13강 목록