본문 바로가기

삽질하기/JAVA

자바(Java) 사용자 정의 Exception 처리

반응형

임의 문자열 변수를 읽어서 차례대로숫자이면 출력하고 숫자가 아니면 에러메시지를 출력하는 심플한 예제이다.

에러 메시지 출력시 해당문자와 위치를 출력하도록 하였다.

1. 사용자 Exception 정의하기

오류 발생시 출력할 메시지나 처리할 데이터 등을 생성자를 통해 인자로 받아 객체를 생성한다.

public class UserException extends Exception {
   private char character;
   private int position;
 
   public UserException(char character, int position) {
      this.character = character;
      this.position = position;
   }

   @Override
   public String getMessage() {
      return String.valueOf(character) + 
         "(위치:" + position + ")는 숫자가 아닙니다.";

   }
}

2. 사용자 정의 Exception 던지기
사용자 기능을 정의하고 Exception 발생시 해당 상황?을 알 수 있도록 혹은 처리할 수 있도록 하기 위해서 해당되는 정보를 인자로 담아 Exception을 생성하여 던진다.

public class UserFunction {
 
   public char isNumber(char character, int position) throws
      UserException {
  
      if('0' > character || '9' < character) {
         throw new UserException(character, position);
      } else {
         System.out.println(character + " is number");
      }
      return character;
   }
}


3. 사용자 정의 Exception 발생과 처리

public class Main {
   public static void main(String[] args) {
      UserFunction function = new UserFunction();
      String example = "12345A67890";
  
      for(int i=0,j=example.length(); i<j; i++) {
         try {
            function.isNumber(example.charAt(i), i);
         } catch (UserException e) {
            e.printStackTrace();
         }
      }
   }
}


출력결과

1 is number
2 is number
3 is number
4 is number
5 is number
UserException: A(위치:5)는 숫자가 아닙니다.
 at UserFunction.isNumber(UserFunction.java:7)
 at Main.main(Main.java:9)
6 is number
7 is number
8 is number
9 is number
0 is number

TIP!
printStackTrace() 메소드는 Exception 발생까지의 흐름을 출력하고 getMessage()를 출력하기 때문에 해당 오류의 원인을 찾는데 아주 유용하다.

물론 일반적인 Application 개발시 무조건 위와 같은 에러메시지를 출력하는 것은 올바르지 않다.