시스템을 프로그래밍하고 개발하는 데 몇 년 동안 문제의 패턴이 유용한 것으로 판단되는 두 가지 상황이 있습니다 (두 가지 경우 모두 던진 예외의 로깅도 포함 null
됩니다). ).
두 가지 상황은 다음과 같습니다.
1. 예외가 예외적 인 상태로 간주되지 않은 경우
이것은 일부 데이터에 대한 작업을 수행 할 때 발생합니다.이 경우 처리 될 수있는 데이터가 필요하지 않기 때문에 데이터가 throw 될 수 있지만 애플리케이션이 계속 실행되기를 원합니다. 당신이 그들을받을 경우, 좋은, 당신이하지 않은 경우도 좋습니다.
클래스의 일부 선택적 속성을 생각할 수 있습니다.
2. 응용 프로그램에서 이미 사용 된 인터페이스를 사용하여 라이브러리의 새로운 (더 좋고 더 빠른) 구현을 제공 할 때
오래된 라이브러리를 사용하는 응용 프로그램이 있다고 가정합니다.이 라이브러리는 예외를 throw하지 않지만 null
오류가 발생하면 반환 됩니다. 따라서이 라이브러리에 대한 어댑터를 작성하여 라이브러리의 원래 API를 거의 복사하고 응용 프로그램 에서이 새로운 (아직 던지지 않음) 인터페이스를 사용하고 null
직접 검사를 처리합니다 .
새로운 버전의 라이브러리가 제공되거나 동일한 기능을 제공하는 완전히 다른 라이브러리가 제공됩니다.이 함수는 null
s 를 반환하는 대신 예외를 발생시키고 사용하려고합니다.
기본 응용 프로그램에 예외를 누설하지 않으려면이 새 종속성을 랩핑하기 위해 작성한 어댑터에 예외를 억제하고 로그하십시오.
첫 번째 경우는 문제가 아니며 원하는 코드 동작입니다. 그러나 두 번째 상황에서, null
라이브러리 어댑터 의 리턴 값이 실제로 오류를 의미하는 경우 예외를 발생시키기 위해 API를 리팩토링하고 예외를 확인하는 대신이를 포착하는 것이 좋습니다 null
(그리고 일반적으로 코드 방식이 좋습니다).
개인적으로 첫 번째 경우에만 예외 억제를 사용합니다. 우리는 나머지 응용 프로그램을 null
s 대신 예외로 작동시킬 예산이없는 두 번째 경우에만 사용했습니다 .