본문 바로가기

Develop/.NET 가이드

[C#] 예외처리 Best Practices

반응형

예외처리
예외처리 Best Practices

예외처리 Best Practices

1. 리소스를 사용하다가 오류가 발생했을 때 finally 를 활용하자.

IDisposable 인터페이스를 구현한 리소스를 사용하다가 오류가 발생했을 때 오류만 잡고 리소스를 해제하는 걸 깜빡하는 경우가 자주 있습니다. 리소스를 사용하다가 오류가 발생할 만한 부분에 finally 문을 정의하고 리소스를 Dispose() 하여 메모리가 누수되지 않도록 합시다.

try 
{
    var resource = new Resource();
}
finally 
{
    resource.Dispose();
}

2. 예외를 발생시킬 때와 방지해야 할 때는 발생 빈도로 결정하자.

예외를 반드시 try/catch 문으로 해결할 필요는 없습니다. 예외의 발생 빈도가 높다면 예외가 발생하지 않도록 미연에 방지하는 방법이 좋습니다. 하지만 예외의 발생 빈도가 낮다면 try/catch 문을 사용할 정도로 예외적인 상황이니 적극적으로 사용하도록 합시다.

예를 들어 네트워크 연결이 이미 끊어져 있는데 네트워크 연결을 끊는 코드를 호출할 때 예외가 발생하다면,

연결 상태를 체크한 뒤 코드를 호출하는 방식으로 예외를 미연에 방지하는 방법과

if(connection.State != ConnectionState.Closed)
{
    connection.Close();
}

예외 처리로 해결하는 방법이 있습니다.

try
{
    connection.Close();
}
catch(NetworkException)
{

}

위 두 가지 방법 중에 어떤 방법을 택할지는 예외가 발생하는 시나리오가 얼마나 예외적인 상황인지에 따라 선택하면 됩니다.

3. 미리 정의된 .NET 예외를 적극적으로 활용하자.

예외의 종류가 너무 많아지면 적절한 예외가 무엇인지 판단하기 어려울 수도 있고 특정 예외가 언제 발생해야 하는 예외인지 모호해질 수도 있으니, .NET 에서 정의한 예외는 모두가 알고 이해하는 예외이므로 적극적으로 활용하도록 합시다.

반응형