C#의 오류 처리를 위한 5가지 모범 사례
이론적으로는 그럴 듯하지만 오류 발생을 완전히 방지하는 것이 항상 가능한 것은 아닙니다. 그렇지 않으면 프로그램이나 앱이 전혀 없을 것입니다! 오류가 발생하고 프로그램이 자체적으로 복구할 수 없는 경우 오류를 처리하는 방법은 오류의 원인과 문제가 발생한 위치에 대해 오류가 제공하는 정보의 양에 따라 달라집니다.
그래서 C#에서 오류를 처리하는 간단하고 유용한 5가지 방법을 설명하기로 결정했습니다.
오류 처리가 무엇인지 이해하기
무엇보다도 오류 처리가 무엇을 의미하는지 이해하는 것이 필요합니다. term error handling은 오류 발생 시 소프트웨어 응용 프로그램의 반응 및 복구 메커니즘을 나타냅니다. 즉, 응용 프로그램, 프로그램 또는 통신의 오류를 정확하게 예측, 감지 및 해결하는 프로세스입니다.
오류 처리를 통해 프로그램의 일반 실행 흐름을 유지하는 것이 더 쉬워집니다. 오류 처리 접근 방식과 관련하여 많은 애플리케이션에서 실제로 많은 아키텍처 문제에 직면합니다.
🧠기억하세요: 던져진 오류는 좋습니다.
항상 예외 스택 추적
throw e;
를 사용하는 것은 C#에서 단순히 throw;
를 사용하여 catch 블록에서 예외를 throw할 수 있기 때문에 catch된 예외를 throw하는 좋은 방법이 아닙니다.이렇게 하면 스택을 추적하고 예외를 훨씬 더 잘 볼 수 있습니다.
나쁜 방법:
try
{
FunctionThatMightThrow();
}
catch (Exception ex)
{
logger.LogInfo(ex);
throw ex;
}
좋은 방법:
try
{
FunctionThatMightThrow();
}
catch (Exception error)
{
logger.LogInfo(error);
throw;
}
예외에 정보를 포함하는 것은 오류 디버깅에 도움이 되므로 좋은 습관입니다. 반면에 목표가 예외를 기록하는 것이라면 throw를 사용하여 책임을 호출자에게 전달해야 합니다.
"throw ex" 사용 피하기
언뜻 보기에 모든 개발자는
throw ex
가 예외를 포착한 후 예외를 다시 발생시키는 가장 좋은 방법이라고 믿을 수 있습니다. 예, 간단한 방법이지만 올바른 방법은 아닙니다. 이 옵션은 스택 추적을 잃게 되므로 좋지 않습니다.나쁜 방법:
try
{
// Do something..
}
catch (Exception ex)
{
// Any action something like roll-back or logging etc.
throw ex;
}
좋은 방법:
try
{
// Do something..
}
catch (Exception ex)
{
// Any action something like roll-back or logging etc.
throw;
}
우리는 내가 단순히
throw
를 사용했다는 것을 좋은 방법으로 볼 수 있습니다. 이러한 방식으로 원래 예외 스택이 보존됩니다. 그렇지 않으면 throw ex
로 이 문이 호출된 코드 줄로 덮어쓰게 됩니다.if 조건 사용을 피하십시오
예외의 종류에 따라 다른 작업을 수행해야 하는 경우 예외 처리를 위해 수많은 catch 블록을 사용하는 것을 고려해야 합니다. 나쁜 습관은
if
조건부를 사용하는 것입니다.나쁜 방법:
try
{
// Do something..
}
catch (Exception ex)
{
if (ex is TaskSchedulerException)
{
// Take action
}
else if (ex is TaskCanceledException)
{
// Take action
}
}
좋은 방법:
try
{
// Do something..
}
catch (TaskCanceledException ex)
{
// Take action
}
catch (TaskSchedulerException ex)
{
// Take action
}
여러 개의 catch 블록을 생성하더라도 항상 최종 catch 블록으로 Exception 인수를 포함하는 catch 블록을 생성하는 것이 좋습니다. 보조 캐치 블록으로 제공됩니다.
포착된 오류를 항상 분석
오류를 발견하면 오류를 수정하거나 조치를 취할 기회가 없기 때문에 오류를 무시하고 내버려 두는 것은 의미가 없습니다.
오류가 발생할 수 있다는 것을 알고 있다면 해당 코드를 try/catch로 래핑하는 것이 항상 더 좋습니다.
나쁜 방법:
try
{
FunctionThatMightThrow();
}
catch (Exception ex)
{
// silent exception
}
좋은 방법:
try
{
FunctionThatMightThrow();
}
catch (Exception error)
{
NotifyUserOfError(error);
// Another option
ReportErrorToService(error);
}
우리가 볼 수 있듯이 오류를 던지는 것은 모든 인쇄된 항목 사이에서 콘솔에서 손실될 수 있기 때문에 훌륭한 해결책이 아닙니다. try/catch로 래핑하면 나중에(오류가 발생하는 경우) 계획을 만들거나 이를 처리하는 방법에 대한 코드 경로를 가질 수 있습니다.
이 팁은 Clean Code Javascript 에서 수정되었습니다. 큰 기여를 해주셔서 감사합니다Ryan McDermott!
Reference
이 문제에 관하여(C#의 오류 처리를 위한 5가지 모범 사례), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bytehide/5-good-practices-for-error-handling-in-c-4391텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)