반응형
반환코드
반환코드의 경우 메서드의 원형에 영향을 미친다. 계산의 결과를 나타내는 용도로 사용되므로 오류가 발생했다는 사실 이외의 추가적인 정보를 전달하기 어렵다. 메서드 호출자에 의해서 처리된다.
예외
예외를 이용하는 방식은 클래스 타입이므로 개발자가 자신만의 예외 타입을 파생시킬 수 있으며 오류에 대한 추가적인 정보를 전달할 수 있다.
콜 스택을 통해서 적절한 catsh문이 구성된 위치까지 전파된다.
적절한 catch문이 포맣되어 있지 않다면 응용프로그램이 정료되니 예외는 쉽게 무시하기 어렵다.
사전에 예외 검사하기
예외를 처리하는 작업은 일반적인 메서드 호출보다 시간이 많이 걸린다. 특정 작업을 수행하기 전에 실패할 가능성이 있는지 확인하는 편이 좋다.
//이런 방법은 사용하지 말라.
DoesWorkThatMightFail worker = new DoesWorkThatMightFail();
try
{
worker.DoWork();
}
catch(WorkerException e)
{
ReportErrorToUser("테스트 실패);
}
예외를 발생 시키는 메서드를 작성할 때는 항상 예외를 유발하는 조건을 사전에 검사할 수 있는 메서드를 함께 작성할 것을 권장한다.
public class DoesWorkThatMightFail
{
public bool TryDoWork()
{
if(!TestConditions())
return false;
Work(); //여전히 실패할 가능성은 있지만 낮다.
return true;
}
public void DoWork => Work();
private bool TestConditions()
{
// ...
return true;
}
private void Work()
{
// ...
}
}
위와 같이 작성하면 예외가 발생할 가능성이 있는 메서드를 호출하기 이전에 사전 조건을 테스트해 볼 수 있으므로 예외로 인한 성능 저하를 피할 수 있다.
반응형
'C# > Effective C#' 카테고리의 다른 글
[Effective C#] Item47 사용자 지정 예외 클래스를 완벽하게 작성하라 (0) | 2023.06.12 |
---|---|
[Effectvie C#] Item 46 리소스 정리를 위해 using과 try/finally를 활용하라 (0) | 2023.06.12 |
[Effective C#] Item 44 바인딩 된 변수는 수정하지 말라 (0) | 2023.05.23 |
[Effective C#] Item 43 쿼리 결과의 의미를 명확히 강제하고, Single()과 First()를 사용하라. (0) | 2023.05.11 |
[Effective C#] Item 42 IEumerable<T> 데이터 소스와 IQueryable 데이터 소스를 구분하라 (0) | 2023.05.11 |