예외 처리가 필요한 까닭

오류가 날 수 있는 곳마다 if를 쓰면 어떻게 될까?

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

예외 처리가 없는 언어

예외가 나면 프로그램이 끝납니다

예외(exception)는 실행 중에 생기는 비정상적인 사건입니다. 예외 처리가 없는 언어에서는 예외가 나면 운영체제가 메시지를 출력하고 프로그램을 끝냅니다. 있는 언어에서는 프로그램이 예외를 가로채 고치고 실행을 이어 갈 수 있습니다.

운영체제는 프로그램을 실행시키고 관리하는 바탕 프로그램입니다.

방법 ① 값으로 알리기

호출마다 검사가 끼어듭니다

예외 처리가 없어도 예외를 다룰 수는 있습니다. 첫째 방법은 서브프로그램이 성공했는지를 반환 값이나 보조 매개변수로 알리는 것입니다. 그러면 부르는 쪽이 호출마다 그 값을 검사해야 합니다.

예시 코드입니다. 서브프로그램은 함수처럼 이름을 붙여 부르는 코드 묶음, 매개변수는 그것이 넘겨받는 값입니다. s != OK는 s가 성공이 아니라는 뜻입니다.

방법 ② ③ 넘겨주기

갈 곳이나 처리할 코드를 넘깁니다

둘째 방법은 오류가 나면 돌아갈 위치를 레이블로 넘기는 것이고, 셋째 방법은 오류를 처리할 서브프로그램을 넘기는 것입니다. 어느 쪽이든 호출마다 넘길 것이 하나씩 늡니다.

예시 코드입니다. 레이블은 코드의 한 위치에 붙인 이름입니다.

예외 처리가 언어에 있으면

코드가 두 덩이로 갈라집니다

언어에 예외 처리가 들어 있으면 검사를 호출마다 적지 않습니다. 본래 하려던 일과 오류를 처리하는 코드가 따로 모여 프로그램이 읽기 쉬워집니다.

앞 장과 같은 예시 코드입니다. 실제로 적는 법은 4편부터 봅니다.

언어에 들어 있을 때의 이점

좋은 점 셋

이 강의가 따르는 교재는 예외 처리가 언어에 들어 있을 때의 이점을 셋으로 정리합니다. 셋째에 나오는 예외 전파는 다음 장에서 그림으로 봅니다.

예외 전파

처리기 하나가 여러 곳을 맡습니다

서브프로그램이 스스로 처리하지 않은 예외는 그것을 부른 쪽으로 넘어갑니다. 이것이 예외 전파(exception propagation)입니다. 부른 쪽에 처리기를 하나만 적어 두면 여러 서브프로그램의 예외를 함께 처리할 수 있습니다.

서브프로그램 이름은 예시입니다. 전파는 5편에서 자세히 봅니다.

다음 편

예외가 나면 실행이 어디로 가는지부터 봅니다

2편예외가 나면 실행은 어디로 갈까? 13강 목록