예외 처리

위키백과, 우리 모두의 백과사전.
(에러 처리에서 넘어옴)

예외 처리(例外 處理) 또는 오류 처리는 일반적인 실행의 흐름을 바꾸는 몇 가지 조건을 처리하도록 설계한 프로그래밍 언어의 개념이나 컴퓨터 하드웨어 구조를 말한다.

일반적으로 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것을 예외 처리라고 한다.

예외의 원인[편집]

예외의 문제는 보통 다음과 같은 데에서 비롯한다.

예외 안전[편집]

메모리 누수, 잘못된 출력, 왜곡된 자료와 같이 코드의 런타임 실패가 악영향을 미치지 않는다면, 이러한 코드를 예외 안전이라고 부른다. 몇 가지 수준의 예외 안전은 다음과 같다:

  1. 실패 투명성 (no throw guarantee)
  2. 강력한 불변의 예외 안전 (Commit or rollback semantics)
  3. 기본 예외 안전 (Basic exception safety)
  4. 최소 예외 안전 (no-leak guarantee)
  5. 예외 보증을 하지 않는 안전 (No exception safety)

프로그래밍 언어에서의 예외 지원[편집]

예외를 눈치채지 못하다가 해당 문제를 실제 동작으로 넘길 경우, 치명적인 문제를 일으킬 수 있다. 이를 막으려면 예외가 일어난 부분을 철저하게 검사해야 한다. 다만 프로그램의 크기가 크다면 일반적인 예외 처리보다 더 많은 기술을 요구할 수도 있다.

C++, 에이다, 자바, 자바스크립트와 같은 프로그래밍 언어는 예외 처리 기능을 포함하고 있다. 이러한 언어에서는 예외 처리를 자동화하고 있다. 예외 처리를 담당하는 핸들러를 찾아 순서대로 콜 스택을 거슬러 올라가 올바른 핸들러를 찾아내면 그 곳에 처리를 맡긴다.

Scheme 언어는 기본적으로 예외를 처리하지 않지만 라이브러리 수준에서 예외를 처리할 수 있다. 표준 규격 SRFI-34에 정의되어 있다.

예제[편집]

try {
  line = console.readLine();

  if (line.length() == 0) {
    throw new EmptyLineException("콘솔에서 읽어들인 줄이 비어 있습니다!");
  }

  console.printLine("안녕하세요, %s님!" % line);
  console.printLine("프로그램이 성공적으로 실행되었습니다");
}
catch (EmptyLineException e) {
  console.printLine("안녕하세요!");
}
catch (Exception e) {
  console.printLine("오류: " + e.message());
}
finally {
  console.printLine("프로그램이 지금 종료되었습니다");
}

같이 보기[편집]

외부 링크[편집]