https://www.youtube.com/watch?v=LQ182IQZfW8
오늘도 즐코하기 위해서 영상을 시청하며 공부한 내용을 정리한다.
1. 예외 처리란?
예외 처리(例外 處理) 또는 오류 처리는 일반적인 실행의 흐름을 바꾸는 몇 가지 조건을 처리하도록 설계한 프로그래밍 언어의 개념이나 컴퓨터 하드웨어 구조를 말한다.
일반적으로 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것을 예외 처리라고 한다.
2. 예외의 원인
예외의 문제는 보통 다음과 같은 데에서 비롯한다.
- 컴퓨터 하드웨어 문제
- 운영 체제의 설정 실수
- 라이브러리 손상
- 사용자의 입력 실수
- 존재하지 않는 파일 이름 입력
- 숫자값 입력 칸에 일반 문자 입력
- 받아들일 수 없는 연산
- 할당하지 못하는 기억 장치 접근
- 페이지 실패 등
3. 예외 안전
메모리 누수, 잘못된 출력, 왜곡된 자료와 같이 코드의 런타임 실패가 악영향을 미치지 않는다면, 이러한 코드를 예외 안전이라고 부른다. 몇 가지 수준의 예외 안전은 다음과 같다:
- 실패 투명성 (no throw guarantee)
- 강력한 불변의 예외 안전 (Commit or rollback semantics)
- 기본 예외 안전 (Basic exception safety)
- 최소 예외 안전 (no-leak guarantee)
- 예외 보증을 하지 않는 안전 (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
위 개념들을 탑재한 상태로 영상에 나오는 것을 실습해봤다.
Java의 'Exception handling', 파이썬의 'try - except', 루비의 'begin - rescue' / 3가지로 나와있는걸 입력해봤다.
try 블럭에서 예외상황인 Exception이 발생하면 catch 블럭에서 해당 오류에 대한 동작을 실행하고,
오류가 나든 안 나든 finally 블럭은 마지막 동작을 수행한다!
예시를 자세히 봐보자!
try 블럭: 책상서랍을 열어본다.
catch 블럭: 어디다 뒀지... (계속 찾는다)
finally 블럭: 찾았든 못찾았든 책상서랍을 닫는다.
이렇듯 finally 에서는 예외처리 함수가 어떤 동작 수행을 통해 어떤 결과를 가져오든 간에
마지막 동작을 함으로써 프로그래머의 실수를 줄여준다고 한다.
더 자세한 내용은 영상에 잘 설명되있으니 확인하길 바란다.
https://github.com/wook2124/Practice_Exception
연습했던 파일은 GitHub에 올려두었다.
'Programming > Practice' 카테고리의 다른 글
[Practice] 계산기 만들기 성공!? (feat. 깃똥찬 계산기) (#코딩공부) (0) | 2020.02.15 |
---|---|
[Practice] CLI 명령어 연습 2 - CLI(Command Line Interface, 명령 줄 인터페이스) (#코딩공부) (0) | 2020.01.27 |
[Practice] CLI 명령어 연습 1 - CLI(Command Line Interface, 명령 줄 인터페이스) (#코딩공부) (0) | 2020.01.26 |
[Practice] 재귀함수?! - 재귀호출(recursive call) (#코딩공부) (0) | 2020.01.25 |
[Practice] HTML, CSS, JavaScript란?! (feat. 깃똥찬 계산기) (#코딩공부) (2) | 2020.01.23 |
댓글