예외적 인 일, 너무 자주 발생할 것으로 예상 할 수없는 일, 문제가 있음을 나타내는 일에는 예외를 사용하십시오. 예를 들어 네트워크가 다운 된 경우 웹 서버에서는 예외입니다. 데이터베이스를 사용할 수 없으면 문제가 있음을 의미합니다. 구성 파일이 없으면 사용자가 엉망이 된 것입니다.
잘못된 코드를 처리하기 위해 예외를 사용하지 마십시오. 코드의 정확성을 확인하려면 어설 션을 사용하거나 .NET Framework 4 이상에서 코드 계약 (어설 션을 대체하고 특히 유용한 추가 기능이있는 코드 계약)을 사용해야합니다.
예외가 아닌 경우에는 예외를 사용하지 마십시오. 사용자가 숫자를 입력하라는 요청을 받았을 때 "dog"을 입력했다는 사실은 예외가 아닙니다.
예외 유형을 선택할 때주의하십시오. 필요할 때 자신 만의 유형을 만드십시오. 부모를 잡는 것이 아이들을 잡을 것이라는 점을 명심하면서 상속을 신중하게 선택하십시오. 절대로 throw Exception
.
오류에 리턴 코드를 사용하지 마십시오. 오류 코드는 쉽게 마스킹되고 무시되며 잊혀집니다. 오류가 있으면 처리하거나 상위 스택으로 전파하십시오.
메소드가 오류를 리턴 할 것으로 예상되고 오류가 예외가 아닌 경우, 열거 형을 사용하고 오류 번호는 절대 사용하지 마십시오. 예:
// Note that the operation fails pretty often, since it deals with the servers which are
// frequently unavailable, and the ones which send garbage instead of the actual data.
private LoadOperationResult LoadProductsFromWeb()
{
...
}
의 의미 LoadOperationResult.ServerUnavailable
, LoadOperationResult.ParsingError
데이터를 분석 할 수 없음 -, 등 그 코드를 서버가 다운이다 (12 개) 수단 및 코드 (13)를 기억, 말보다 훨씬 더 명시 적입니다.
특정 도메인에서 일하는 모든 개발자에게 알려진 공통 코드를 참조 할 때 오류 코드를 사용하십시오. 예를 들어 HTTP 404를 찾을 수 없음 또는 HTTP 500 내부 서버 오류에 대한 열거 형 값을 다시 만들지 마십시오.
부울에주의하십시오. 조만간 특정 방법의 성공 여부뿐만 아니라 그 이유를 알고 싶을 것입니다. 예외와 열거는 훨씬 강력합니다.
스택의 맨 위에 있지 않는 한 모든 예외를 포착하지 마십시오. 예외가 발생하면 처리 할 준비가되어 있어야합니다. 모든 것을 잡으면 코드가 올바르게 실행되는지 신경 쓰지 않는다는 것을 알 수 있습니다. 이렇게하면 "지금이 문제를 해결하는 방법을 검색하고 싶지 않습니다"를 해결할 수 있지만 조만간 당신을 해칠 것입니다.
C #에서는 다음과 같은 예외를 다시 발생시키지 마십시오.
catch (SomeException ex)
{
...
throw ex;
}
당신은 스택을 깨고 있기 때문에. 대신이 작업을 수행하십시오.
catch (SomeException)
{
...
throw;
}
예외 메시지를 작성할 때 노력하십시오. throw Exception("wrong data")
또는 같은 것을 몇 번 이나 보았습니다 throw Exception("shouldn't call this method in this context")
. 6 개월 후 자신을 포함한 다른 개발자들은 어떤 데이터가 잘못되었는지, 왜 어떤 이유를 문맥에서 어떤 방법으로 호출해야하는지, 어떤 문맥으로 정확하게 호출하지 않아야하는지 전혀 모를 것입니다.
사용자에게 예외 메시지를 표시하지 마십시오. 그것들은 평범한 사람들에게는 기대되지 않으며 종종 개발자 스스로 읽을 수 없습니다.
예외 메시지를 현지화하지 마십시오. 현지화 된 메시지에 대한 설명서를 검색하는 것은 매우 소중합니다. 모든 메시지는 영어와 영어로만 작성되어야합니다.
예외 및 오류에만 집중하지 마십시오. 로그도 매우 중요합니다.
.NET에서 메소드의 XML 문서에 예외를 포함시키는 것을 잊지 마십시오.
/// <exception cref="MyException">Description of the exception</exception>
XML 문서에 예외를 포함 시키면 라이브러리를 사용하는 사람이 훨씬 쉽게 작업 할 수 있습니다. 어떤 예외가 메소드에 의해 발생 될 수 있는지 추측하는 것보다 더 성가신 것은 없습니다.
이런 점에서 Java 예외 처리 는보다 강력하고 효과적인 접근 방법을 제공합니다. 호출 된 메소드에 의해 잠재적으로 발생하는 예외를 처리하거나 처리하지 않는 예외를 발생시킬 수 있음을 자신의 메소드로 선언하여 상황을 특히 투명하게 만듭니다.