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를 최소한으로 써서 관리를 할 수 있는 코드를 만드는게 개발자의 몫이라고 생각이 듭니다.
긴 글 읽어 주셔서 감사합니다.
'.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 |