본문 바로가기

프로그래밍 언어/JAVA

JAVA 입문 - 사용자 정의 예외

지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 예외 처리 미루기

 

자바에서 제공하는 예외 처리 클래스 이외에 개발하는 프로그램에 따라 다양한 예외 상황이 발생할 수 있다. 예로 어떤 사이트에서 회원 가입을 할 때 아이디는 null 값이면 안되며 8자 이상 18자 이하로 만들어야 하는 조건이 있다. 이런 조건을 체크하는 작업을 자바 프로그램에서 한다면 예외 클래스를 직접 만들어 예외를 발생시키고 예외 처리 코드를 구현할 수 있다. 실무에서 프로젝트를 진행할 때도 예외 클래스를 직접 만들어 사용하는 경우가 종종 있다고 한다.

 

사용자 정의 예외 클래스 구현하기

사용자 정의 예외 클래스를 구현할 때는 기존 JDK에서 제공하는 예외 클래스 중 가장 유사한 클래스를 상속받는 것이 좋다. 유사한 예외 클래스를 잘 모르겠다면 가장 상위 클래스인 Exception 클래스에서 상속받자. 아이디가 null 값이거나 지정 범위를 벗어나는 경우의 예외 처리 클래스를 만들어보자.

위 코드는 Exception 클래스에서 상속받아 구현했다. 예외 상황 메시지를 생성자에서 입력받는다. Exception 클래스에서 메시지 생성자, 멤버 변수와 메서드를 이미 제공하고 있으므로 super(message)를 사용하여 예외 메시지를 설정한다. 나중에 getMessage( ) 메서드를 호출하면 메시지 내용을 볼 수 있다. 이제 예외를 발생시키자.

출력 결과

IDFormatTest 클래스에서 setUserID( ) 메서드는 아이디에 대한 제약 조건을 구현한다. 이 제약 조건이 지켜지지 않으면 예외를 발생시킨다. 여기서 발생하는 예외는 자바에서 제공하는 예외가 아니기에 예외 클래스를 직접 생성해 예외를 발생시켜야 한다.

 

11~13행에서 매개변수로 넘어온 userID가 null인 경우 예외 메시지를 생성자에 넣어 예외 클래스를 생성한 후 throw 문으로 직접 예외를 발생시킨다. setUserID( ) 메서드는 IDFormatException 예외 처리를 해야 한다. 이 예외는 메서드를 호출하는 부분에서 처리하도록 throws 예약어를 선언해 준다. 예외 상황을 만들기 위해 22행에서 아이디 값에 null을 대입했다. 그럼 setUserID( ) 메서드에서 IDFormatException 예외가 발생하고 setUserID( ) 메서드는 이 예외를 미뤘으므로, 이 예외는 25행 catch 블록에서 처리된다. 마찬가지로 아이디가 8자 이하인 예외를 처리하기 위해 29행에서 아이디에 7자 숫자를 대입했다. 이때 발생한 IDFormatException 예외는 32행의 catch 블록에서 처리된다. 

 

이처럼 프로그램 개발 상황에서 필요에 따라 사용자 정의 예외클래스를 직접 만들고 이를 발생시켜 예외 처리를 할 수 있음을 알 수 있다.

 

예외 처리를 할 때는 로그를 잘 남기자

회사에서 어떤 시스템을 개발해 구축했다. 근데 고객으로부터 오류가 발생했다는 연락이 왈을 때 개발자는 어떤 조치를 취할 수 있을까? 어떤 상황에서 오류가 났는지, 시스템에서 어떤 메서드를 호출하고 어떻게 매개변수를 전달했는지 오류 현상만 보고는 알 수 없다. 따라서 프로그램을 개발할 때는 로그(log)를 남기는 것이 매우 중요하다. 오류가 발생했을 때 로그를 보고 오류가 발생하는 코드를 순서대로 따라가며 확인할 수 있고 원인을 찾을 수 있다. 로그는 정보 의미에 다라 레벨을 나눠 관리한다. 간단한 정보 의미를 가진 로그부터 심각한 예외가 발생했을 때의 로그까지 여러 레벨이 존재할 수 있다. 이런 로그를 체계적이고 의미 있게 남겨 시스템에서 오류가 났을 때 그 원인을 유추해 볼 수 있어야 한다.

 

참고 서적 : 자바 프로그래밍 입문 - 박은종