자바에서 제공하는 예외 처리 클래스 외에 개발하는 프로그램에 따라 다양한 예외 상황이 발생한다.
예를 들어 아이디 생성조건을 생각해보면, 아이디는 null값이면 안 되고, 8자 이상 20자 이하로 만들어야하는 조건이 필요할 수 있다. 이러한 조건을 만족하지 않는 예외 발생을 예방하기위해 예외 클래스를 직접 만드든 것이 필요하다.
지금부터 어떻게 구현하는지 알아보도록 하자.
사용자 정의 예외 클래스 구현하기
사용자 정의 예외 클래스를 구현할 떄에는 기존 JDK에서 제공하는 예외 클래스 중 가장 유사한 클래스를 상속받는 것이 좋다. 유사한 예외 클래스가 무엇인지 모르겠다면 Exception클래스에서 상속받으면 된다.
package exception;
public class IDFormatException extends Exception{
public IDFormatException(String message) { //생성자의 매개변수로 예외 상황 메세지를 받는다.)
super(message);
}
}
Exception 클래스에서 메세지 생성자, 멤버 변수와 메서드를 이미 제공하고 있으므로 super(message)를 사용하여 예외 메세지를 설정한다. 나중에 getMessagr() 메서드를 호출하면 메세지 내용을 볼 수 있다.
package exception;
public class IDFormatTest {
private String userID;
public String getUserID() {
return userID;
}
public void setUserID(String userID) throws IDFormatException { //아이디 제약 조건 구현
//예외를 메서드가 호출될 때 처리하도록 미뤘다.
if(userID == null) {
throw new IDFormatException("아이디는 null일 수 없습니다."); //강제로 예외 발생
} else if (userID.length() < 8 || userID.length() >20) {
throw new IDFormatException("아이디는 8자 이상 20자 이하로 쓰세요." ); //강제로 예외 발생
}
this.userID = userID;
}
public static void main(String[] args) {
IDFormatTest test = new IDFormatTest();
String userID = null;
try{
test.setUserID(userID);
}catch (IDFormatException e) {
System.out.println(e.getMessage());
}
userID = "1234567";
try{
test.setUserID(userID);
}catch (IDFormatException e) {
System.out.println(e.getMessage());
}
}
}
위처럼 자바에서 제공하는 예외가 아닌데 필요한 경우 예외 클래스를 직접 생성하여 예외를 발생시켜야한다.
예외를 처리할 때는 로그를 잘 남겨야한다. 어떤 상황에서 어떤 오류가 났는지, 시스템에서 어떤 메서드를 호출하고, 어떻게 매개변수를 전달했는지 오류현상만 보고는 알 수 없다. 따라서 프로그램을 개발할 때는 로그를 남기는 것이 매우 중요하다. 오류가 발생했을 떄 오류가 발생하는 코드를 순서대로 따라가며 확인할 수 있고 원인을 찾을 수 있다. 로그는 정보 의미에 따라 레벨을 나누어 관리한다. 로그를 체계적이고 의미있게 남기어 시스템에서 오류가 났을 때 원인을 유추해볼 수 있어야한다. 이는 차차 공부하고 발전시켜나가도록 하자!
'공부 STUDY > JAVA' 카테고리의 다른 글
[JAVA] 자바 입출력과 스트림 - (2) | 바이트 단위 스트림 - InputStream (0) | 2023.01.24 |
---|---|
[JAVA] 자바 입출력과 스트림 - (1) | scanner 클래스와 Console 클래스에대해 알아보자 (0) | 2023.01.23 |
[JAVA] 자바의 예외처리(Exception) | try-catch-finally 문, try-with-resource 문 (0) | 2023.01.23 |
[JAVA] 람다식이란? 람다식 사용 방법에대해 알아보자! (1) | 2023.01.23 |
[JAVA] 스트림(Stream)이란 무엇일까? (0) | 2023.01.23 |