Java에서 사용자 지정 예외 생성

1. 소개

이 튜토리얼에서는 자바에서 커스텀 예외를 생성하는 방법을 다룰 것 입니다.

사용자 정의 예외가 선택 및 선택되지 않은 예외에 대해 구현되고 사용되는 방법을 보여줍니다.

2. 사용자 지정 예외의 필요성

Java 예외는 프로그래밍에서 발생하는 거의 모든 일반적인 예외를 포함합니다.

그러나 때때로 우리는 이러한 표준 예외를 우리 자신으로 보완해야합니다.

사용자 지정 예외를 도입하는 주된 이유는 다음과 같습니다.

  • 비즈니스 로직 예외 – 비즈니스 로직 및 워크 플로와 관련된 예외입니다. 이는 애플리케이션 사용자 또는 개발자가 정확한 문제가 무엇인지 이해하는 데 도움이됩니다.
  • 기존 Java 예외의 하위 집합을 포착하고 특정 처리를 제공하려면

Java 예외는 확인 및 선택 취소 할 수 있습니다. 다음 섹션에서는이 두 가지 경우를 모두 다룰 것입니다.

3. 사용자 지정 확인 예외

확인 된 예외는 명시 적으로 처리해야하는 예외입니다.

파일의 첫 번째 줄을 반환하는 코드를 살펴 보겠습니다.

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) return file.nextLine(); } catch(FileNotFoundException e) { // Logging, etc } 

위의 코드는 Java 검사 예외를 처리하는 고전적인 방법입니다. 코드에서 FileNotFoundException이 발생하지만 정확한 원인이 무엇인지는 명확하지 않습니다. 파일이 존재하지 않거나 파일 이름이 유효하지 않습니다.

사용자 지정 예외를 생성하려면 java.lang.Exception 클래스 를 확장해야합니다 .

IncorrectFileNameException 이라는 사용자 지정 검사 예외를 만들어 이에 대한 예를 살펴 보겠습니다 .

public class IncorrectFileNameException extends Exception { public IncorrectFileNameException(String errorMessage) { super(errorMessage); } } 

또한 String 을 오류 메시지로 사용하고 부모 클래스 생성자를 호출 하는 생성자를 제공해야합니다 .

이것은 사용자 지정 예외를 정의하기 위해 수행해야하는 전부입니다.

다음으로 예제에서 사용자 지정 예외를 사용하는 방법을 살펴 보겠습니다.

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) return file.nextLine(); } catch (FileNotFoundException e) { if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); } //... } 

사용자 지정 예외를 만들고 사용 했으므로 이제 사용자는 정확한 예외가 무엇인지 알 수 있습니다. 이것이 충분하나요? 결과적으로 예외의 근본 원인을 잃게 됩니다.

이 문제를 해결 하기 위해 생성자에 java.lang.Throwable 매개 변수를 추가 할 수도 있습니다 . 이렇게하면 루트 예외를 메서드 호출에 전달할 수 있습니다.

public IncorrectFileNameException(String errorMessage, Throwable err) { super(errorMessage, err); } 

이제 IncorrectFileNameException 이 다음과 같이 예외의 근본 원인과 함께 사용됩니다.

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) { return file.nextLine(); } } catch (FileNotFoundException err) { if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException( "Incorrect filename : " + fileName , err); } // ... } 

이것이 발생 원인을 잃지 않고 사용자 정의 예외 사용할 수있는 방법 입니다.

4. 사용자 지정 확인되지 않은 예외

동일한 예에서 파일 이름에 확장자가없는 경우 사용자 지정 예외가 필요하다고 가정합니다.

이 경우이 오류는 런타임 중에 만 감지되므로 이전 예외와 유사한 사용자 지정 확인되지 않은 예외가 필요합니다.

확인되지 않은 사용자 정의 예외를 생성하려면 java.lang.RuntimeException 클래스 를 확장해야합니다 .

public class IncorrectFileExtensionException extends RuntimeException { public IncorrectFileExtensionException(String errorMessage, Throwable err) { super(errorMessage, err); } } 

따라서이 사용자 지정 확인되지 않은 예외를 예제에서 사용할 수 있습니다.

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) { return file.nextLine(); } else { throw new IllegalArgumentException("Non readable file"); } } catch (FileNotFoundException err) { if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException( "Incorrect filename : " + fileName , err); } //... } catch(IllegalArgumentException err) { if(!containsExtension(fileName)) { throw new IncorrectFileExtensionException( "Filename does not contain extension : " + fileName, err); } //... } 

5. 결론

사용자 지정 예외는 비즈니스 논리와 관련된 특정 예외를 처리해야 할 때 매우 유용합니다. 올바르게 사용하면 더 나은 예외 처리 및 로깅을위한 유용한 도구로 사용할 수 있습니다.

이 기사에 사용 된 예제 코드는 Github에서 사용할 수 있습니다.