지난번에 이어서 사용자 예외처리(UserException) 객체를 생성하고 사용해 보겠습니다.
과정은 어렵지 않다고 할 수 있습니다. UserException 객체를 생성하고 예외 처리할 구문에서
사용하면 됩니다.
우선 UserException 을 생성하겠습니다.
다음과 같이 생성이 가능합니다.
@SuppressWarnings("serial")
public class UserException extends Exception{
private String errorPosition;
public UserException(String errorPosition) {
this.errorPosition = errorPosition;
}
@Override
public String getMessage() {
return errorPosition;
}
}
위 코드처럼 Exception을 상속받아 작성해야 합니다.
객체를 사용할 때는 예외 처리 구문에 throw new UserExcpetion으로 작성하시면 됩니다.
간단한 사용 예는 다음과 같습니다.
public static void main(String[] args) throws UserException {
if(11!=22) {
throw new UserException("## 1 not equre 2");
}
}
이렇게 작성하고 실행하면 다음과 같이 에러가 발생합니다.
이와 같이 사용자가 설정한 메시지가 표시가 되는 것을 확인할 수 있습니다.
그리고 다른 경우지만 springsecurity에서 사용자 access deny를 처리하는 경우도
사용을 해 봤습니다.
우선 BadCredentialsException을 상속받아 다음의 함수를 정의했습니다.
public class DenyUserException extends BadCredentialsException {
public DenyException(String message, UserDetails user) {
super(message, user);
}
}
위의 코드는 SpringSecuryt의 BadCredentialsExceptionBadCredentialsException을 상속받아 생성한 코드입니다.
위 코드는 보통 사용자 인증 시 에러 메시지를 추가하는 것입니다.
throw new DenyUserException("Deny user exception", user);
이렇게 사용하시면 입력한 메시지가 로그에 출력됩니다.
예외처리를 잘 사용하는 것은 중요합니다.
그래서 기본적으로 try/catch 구문을 사용하는 습관이 중요하고
어느 위치에 사용해야 합니다. 그리고 catch Exception 처리를 사용하는 경우
보통은 메시지만 남기는데 catch 문에서도 적절한 코드로
예외처리하는 것이 중요합니다.
public String getAbc(String aaa) {
String abc = aaa;
try {
if(abc.length > 11) {
abc = "defg";
}
} catch(NullPointException ne) {
System.out.println(ne.toString());
abc = "123";
getAbc(abc);
} catch(Exception e) {
System.out.pritln(e.toString());
}
return abc;
}
위의 구문처럼 특정 예외인 경우는 예외 사항이 해결하는 것이 좋은 것 같습니다.
예외처리는 항상 번거롭습니다.
그리고 습관 되지 않으면 항상 빼먹고 개발하게 됩니다.
그래서 항상 예외 구문을 개발 툴에서 자동 생성되도록 설정하는 것도 좋습니다.
예외처리에 대한 내용을 정리하면 저도 다시 생각하게 되었습니다.