C# 예외처리, 고급예외처리 (try, catch, finally, throw) 적용시키기
이번 시간에는 C#프로그래밍언어에서
예외처리를 하는 방법을 공부해보겠습니다.
예외처리란 말 그대로 예외가 발생했을 때
어떻게 처리를 해줄 것이냐를 정해주는 것입니다.
예를들어서 정수를 입력받아야하는데,
문자나 특수문자를 입력하거나
인덱스가 10까지 있는 배열인데,
15번째 인덱스에 접근하려고하거나
없는 파일인데,
불러오려고 할 경우에
예외처리를 각각 주어 처리할 수 있겠죠.
예를 들어서 위와 같은 코드는
크기가 5인 char형 배열을 선언해서
a~e까지 저장을 해주고
인덱스를 입력받아서 출력하는 프로그램입니다.
그래서 3을 입력하면
정상적으로 0,1,2,3번째 인덱스인
b가 정상적으로 출력되는 것을 알 수 있습니다.
그러나 여기서 인덱스를 초과하는
10을 입력하면 어떻게 될까요?
위와 같은 처리되지 않은 예외가 발생합니다.
그리고 프로그램이 강제적으로 종료되죠.
그래서 예외처리를 해주는 것 이랍니다.
우선 가장 일반적으로 사용하고 있는
조건문을 사용한 일반기본의 예외처리입니다.
노란색 박스안에 넣어준 것 처럼
위 코드에서는
0과 4를 벗어나는 정수를 입력하게되면,
예외를 발생시켜서
다시 입력을 받게됩니다.
(문자나 문자열입력시또 예외가 발생하는데
이건 일반예외처리가 뭔지 설명하기위해
간단히 짠 코드이므로 그냥 넘어가주세요.)
C# try, catch
그 다음은 고급예외처리입니다.
고급예외처리에서는
일반적으로 try, catch 가사용되고
throw와 finally를 사용할 수 있습니다.
위의 노란색 박스에서
각각 2가지의 예외처리를 해주고있습니다.
첫 캐치구문에서는,
FormatException 예외를 받아서
정수를 입력해 달라고 오류를 보냅니다.
FormatException은 말 그대로
포멧이 잘못 된 경우입니다.
(정수형변환을 해야하는데 문자열을 넣거나. 등)
그 다음은
IndexOutOfRangeException 예외입니다.
예외의 말 그대로 범위를 벗어난 경우
발생하게되는 오류 메세지입니다.
이런 메세지들은 디버그시 확인할 수 있습니다.
(개념만 집어서 간단하게 설명했습니다.)
다음은 각각 출력의 결과입니다.
보시면, 처리가 잘 되고있습니다.
C# throw finally
이제 throw와 finally도 사용해 보겠습니다.
일단 My_fx라는 클래스에서
static매서드를 하나 생성합니다.
그런데 이 메세지는 13번줄 처럼
throw를 사용해서 강제로 예외를 떤집니다.
그리고 메인에서 실행해주는데요?
try문으로 감싸주어 그 예외를 catch해줍니다.
catch안에서 예외를 처리해주면되고
마지막으로 finally구문은
예외가 발생하든 안하든 무조건 실행해주게됩니다.
그래서 마지막에 그래도 이건 실행이 되는거죠.
출력결과는 위와 같습니다.
이처럼 C#에서 예외처리와
고급예외처리를 하는 방법을 알아보았습니다.
위에는 개념만 전달하기위해서
완벽한 처리는 해주지 않았는데
응용하면 여러 예외처리가 가능하므로
응용을 해보시기 바랍니다.
저도 더 공부를 해야겠습니다.
다른 C#내용 공부하러가기
▶[C#] 쓰레드(Thread) 사용방법 + start() 메서드(method)
'C#(.NET)' 카테고리의 다른 글
[C#] 복습 참조복사 값복사 (얕은 복사, 깊은 복사) (1) | 2018.04.05 |
---|---|
C# Linq (from in select 구문, orderby, 매서드에서 사용) (0) | 2018.02.05 |
[C#] 쓰레드(Thread) 사용방법 + start() 메서드(method) (0) | 2017.11.22 |
c# 인터페이스(interface) 그리고 IComparable, IDisposable 무엇 (1) | 2017.11.17 |
[C#] Dictionary 메모화 객체 사용하는 방법 효율적! (2) | 2017.10.29 |