본문 바로가기

.NET/C#

try~catch문(예외처리)

728x90
반응형
이번에는 예외처리에 대해서 공부해 보겠습니다.

예외란 뜻하지 못한 상황을 말합니다. 잘 돌아가던 프로그램이 어느날 갑자기 특정 상황에서 에러를 발생시키는 것을 예외라고 합니다. 대표적인 예로 0으로 나눈다던가 없는 파일을 불러온다 라는 상황을 말하는 것이지요.

프로그램 언어들은 이 예외를 try~catch 문으로 해결을 하였습니다. 예외가 발생할 수 있는 부분을 try로 감싸고 예외가 발생했을 때의 코드를 catch문에 넣어두는 것이죠.

using System;

 

namespace TryCatchText

{

    class Program

    {

        static void Main(string[] args)

        {

            int a, b, c;

            a = 10;

            b = 0;

            c = a / b;

            Console.WriteLine(c);

        }

    }

}


위와 같은 코드를 실행을 시킨다면 100% 에러가 발생할 것입니다. 숫자를 0으로 나눌수 없다면서 말이죠. 그럼 이 상황에 에러가 뜨는 대신 에러가 나는 이유를 출력하도록 해보겠습니다.

using System;

 

namespace TryCatchText

{

    class Program

    {

        static void Main(string[] args)

        {

            int a, b, c;

            a = 10;

            b = 0;

            try

            {

                c = a / b;

                Console.WriteLine(c);

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

        }

    }

}


위 코드를 실행 시키면 아래 그림과 같이 "0으로 나누려 했습니다" 라는 문구가 나오게 되어 있습니다.



사용자에게 에러를 보여주는 대신 에러가 발생한 이유를 보여주는 것을 확인 할 수 있습니다.


예외 상황에 따라 다른 예외를 내보낼 수 있습니다. 위와 같이 0으로 나누려고 했을때는 DividByZeroException 으로 처리하고 값의 범위를 넘어 갈때는 OverflowException을 파일이 존재하지 않을 때는 FileNotFoundException를 처리하게 되어 있습니다. 만약 모든 예외를 한번에 처리 하고 싶다면 위 코드 처럼 Exception으로 처리를 하면 되는 것이죠.


그리고 제대로 실행되었거나 예외처리가 되었을 때나 항상 처리 해야 되는 부분이 있을 수 있습니다. 그럴 때는 우리는 finally문을 사용하면 항상 실행이 되도록 할 수 있습니다.

using System;

 

namespace TryCatchText

{

    class Program

    {

        static void Main(string[] args)

        {

            int a, b, c;

            a = 10;

            b = 0;

            try

            {

                c = a / b;

                Console.WriteLine(c);

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

            finally

            {

                Console.WriteLine("무조건 출력됨");

            }

        }

    }

}


위의 코드와 다른 점은 finally 를 추가한것인데요. 실행 결과에는 어떤 영향을 미쳤는 보도록 하죠.



예외가 처리되었음에도 불구하고 "무조건 출력됨"이 출력된 것을 볼 수 있습니다. 예외상황이나 아닐 경우나 꼭 실행되어야 할 코드가 있다면 finally를 사용하면 되겠죠 ^^


try~catch문은 정말 에러로부터 우리를 벗어나게 해주는 마법같은 문법입니다. 하지만 이 문법이 최선이다라고는 말할 수 없습니다. 이 문법을 너무 넣다 보면 코드의 흐림 자체가 깨지기도 쉽고 예외가 필요없을 때 마져 예외가 발생할 수 있기 때문이죠. 그 밖에도 많은 이유가 있지만 생각이 나질 않네요 ㅜㅜ

예외를 아주 안일어나게 할 수는 없겠지만 그 예외 상황을 최대한 줄이고 try~catch를 최소한으로 써서 관리를 할 수 있는 코드를 만드는게 개발자의 몫이라고 생각이 듭니다.


긴 글 읽어 주셔서 감사합니다.

728x90
반응형

'.NET > C#' 카테고리의 다른 글

스레드 정보 알아오기...  (0) 2010.10.12
C# 소수(Prime Number) 찾기  (0) 2010.10.12
C# 프로세스 목록 알아오기  (1) 2010.10.11
Thread 란?  (0) 2010.10.10
Windows Forms의 시작  (2) 2010.01.19
C# Event  (0) 2010.01.18
C# delegate  (0) 2010.01.14
FileAndDirectory  (0) 2010.01.12
C# File Input/Output  (1) 2009.12.24
C# Collection  (0) 2009.12.21