본문 바로가기
C++ 200제/코딩 IT 정보

C# try catch문, Exception 프로그래밍 (C++ 동일)

by vicddory 2018. 12. 16.
반응형

C# try catch문, Exception 프로그래밍 (C++ 동일)


프로그래밍에 있어서 실행이 잘못될 수 있다는 가능성을 생각해야 합니다. 코드가 원하는 대로 수행되지 않을 거란 예상을 하고, 실패했을 경우 대처할 방안이 필요합니다. 코드에서 발생하는 버그 중 일부는 프로그래머가 예측하기 어려운 것들도 많습니다. 그래서 필요한 것이 c# try catch문입니다. Exception, 즉 예외처리 프로그래밍입니다.


exception c++ c# 예외처리


C#과 C++은 똑같이 예외상황과 예외상황을 처리할 수 있는 코드를 구분합니다.


1. 코드를 try 블록 안에 작성하는 겁니다. C# try catch문은 C# C++ 공통 키워드로 사용 방법도 똑같습니다. 해당 코드는 try 블록에서 실행하는데, 예외상황이 발생하지 않으면 처음부터 끝까지 수행하지만, 중간에 예외상황이 발생하면 나머지 코드는 수행하지 않고 catch 문으로 분기합니다. 


2. 예외상황이 발생하는 catch 문을 작성합니다. catch문은 에러 유형을 세분화하여 여러 개 선언할 수 있지만, 단순히 에러 메시지만 확인하는 용도 하나만 선언할 수도 있습니다.

다음 코드는 int 배열을 선언하고 할당되지 않은 배열 인덱스에 접근하여 에러를 발생합니다. 잘못된 인덱스 접근이므로 예외상황이 발생합니다. 당연히 19번 라인은 수행되지 않고 catch 문의 23번 라인이 수행됩니다.


※ C# try catch문 특징

- try 문에서 예외상황이 발생하면 나머지 코드는 수행하지 않고 catch 문으로 분기

- catch문으로 분기하면 try 문으로 돌아가지 않음.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int[] arr = { 123 };
 
                int tmp = arr[10];
 
                Console.WriteLine("tmp = {0}", tmp);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
cs


C# try catch문, Exception 프로그래밍 (C++ 동일)


예외상황을 처리할 때 catch 문이 동작합니다. catch문의 인자로 전달되는 Exception은 예외 상황과 관련한 상세한 정보를 담습니다. 프로그래머는 예외상황이 발생할 때 catch문의 인자를 보고 예외상황을 유발하는 에러 조건을 유추할 수 있습니다.


그리고 try 블록과 catch 블록이 없다면 결과는 어떻게 될까요? 위 소스 코드는 비록 에러를 유발하지만, 프로그램이 다운되진 않습니다. 하지만, 예외처리하지 않는다면 프로그램은 예외상황 발생 시 에러를 유발하며 강제 종료됩니다.


위의 소스 코드에서 13, 14, 20, 21, 22, 23, 24번 라인을 삭제해 c# try catch문 예외처리 구문을 지워서 실행하면 아래 같은 결과를 확인할 수 있습니다.


예외처리 exception c#


System.IndexOutOfRangeException : '인덱스가 배열 범위를 벗어났습니다.'


이처럼 C# try catch문 예외 처리는 프로그램의 안전성과도 연관이 있습니다. 그래서 예외상황이 발생할만한 지점엔 Exception 예외처리를 해주는 것이 필요합니다.


C# try catch문, Exception 프로그래밍 (C++ 동일)

반응형