본문 바로가기
Programming/Practice

[Practice] 예외처리?! - Exception Handling (#코딩공부)

by 함께 공부해요 2020. 1. 24.

https://www.youtube.com/watch?v=LQ182IQZfW8

오늘도 즐코하기 위해서 영상을 시청하며 공부한 내용을 정리한다.


1. 예외 처리란?

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

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


2. 예외의 원인

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


3. 예외 안전

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

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

4. 프로그래밍 언어에서의 예외 지원

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

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

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


5. 예제

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("프로그램이 지금 종료되었습니다");
}


-출처: https://ko.wikipedia.org/wiki/%EC%98%88%EC%99%B8_%EC%B2%98%EB%A6%AC

 

예외 처리 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org


위 개념들을 탑재한 상태로 영상에 나오는 것을 실습해봤다.

 

Java의 'Exception handling', 파이썬의 'try - except', 루비의 'begin - rescue' / 3가지로 나와있는걸 입력해봤다.

 

try 블럭에서 예외상황인 Exception이 발생하면 catch 블럭에서 해당 오류에 대한 동작을 실행하고,

오류가 나든 안 나든 finally 블럭은 마지막 동작을 수행한다!

 

예시를 자세히 봐보자!


try 블럭: 책상서랍을 열어본다.

catch 블럭: 어디다 뒀지... (계속 찾는다)

finally 블럭: 찾았든 못찾았든 책상서랍을 닫는다.

 

이렇듯 finally 에서는 예외처리 함수가 어떤 동작 수행을 통해 어떤 결과를 가져오든 간에

마지막 동작을 함으로써 프로그래머의 실수를 줄여준다고 한다.

 

더 자세한 내용은 영상에 잘 설명되있으니 확인하길 바란다.

 

 

https://github.com/wook2124/Practice_Exception

 

wook2124/Practice_Exception

My first repository. Contribute to wook2124/Practice_Exception development by creating an account on GitHub.

github.com

연습했던 파일은 GitHub에 올려두었다.

댓글