컴퓨터공학 💻 도서관📚

Part2. 6-10 사용자 정의 예외 클래스와 그 활용 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 6-10 사용자 정의 예외 클래스와 그 활용

들판속초록풀 2025. 8. 15. 14:00

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

  • 자바에서 제공되는 예외 클래스 외에 프로그래머가 직접 만들어야 하는 예외가 있을 수 있음
  • 기존 예외 클래스중 가장 유사한 예외 클래스에서 상속 받아 사용자 정의 예외 클래스를 만든다.
  • 기본적으로 Exception 클래스를 상속해서 만들 수 있음
    (우리가 시스템을 개발하다 보면 Exception을 실제로 만드는 경우가 많이 있다.
     모든 Exception이 우리 입맛에 딱 맞지 않기에 필요한 경우에는 Exception을 만들어서
     그 Exception을 핸들링하고 Exception에 대한 로그를 남겨서 안정적인 시스템을 구현한다.)

패스워드에 대한 예외 처리 하기

  • 패스워드를 입력할 때 다음과 같은 경우 오류처리를 합니다.
  • 비밀번호는 null일 수 없습니다.
  • 비밀번호의 길이는 5이상입니다.
  • 비밀번호는 문자로만 이루어져서는 안됩니다. (하나 이상의 숫자나 특수문자를 포함)
    (이런 Exception은 자바에서 제공되지 않았기에  직접 Exception을 만든다.)
// IllegalArgumentException 은 argument(함수인자)에 오류가 있을 때 런타임 익셉션으로 사용하는 것이다.

public class PasswordException extends IllegalArgumentException{ // 상속받은 클래스로 Exception 구현
	
	public PasswordException(String message) {
		super(message);    // 상위 클래스 꺼 활용
	}
}

(아니 PasswordException 클래스에서 if , else if 정의하면 안 되나??.... 가독성이 좀 떨어지는데.... 일단 넘어가자)

public class PasswordTest {

		private String password;
		
		public String getPassword(){
			return password;
		}
		                            // setPassword 에서는 예외 처리를 미룬다(throws 한다). 메서드를 사용하는 쪽에서 try-catch 처리를 해라
		public void setPassword(String password) throws PasswordException{
			                       // 이런 경우에 setPassword는 PasswordException이 발생을 한다.
			if(password == null){   // null 인 경우
				throw new PasswordException("비밀번호는 null 일 수 없습니다");  // throw 
			}
			else if( password.length() < 5){    // 5자 미만인 경우
				throw new PasswordException("비밀번호는 5자 이상이어야 합니다.");
			}
			else if (password.matches("[a-zA-Z]+")){   // 정규식, String이 a부터 z 또는 A부터 Z로만 반복되는 것과 매치가 된다.
				throw new PasswordException("비밀번호는 숫자나 특수문자를 포함해야 합니다.");
			}
			
			this.password = password;    // 정상인 경우
		}
		
		public static void main(String[] args) {

			PasswordTest test = new PasswordTest();
			String password = null;      // null 인 경우
			try {
				test.setPassword(password);
				System.out.println("오류 없음1");   // 오류가 발생하지 않으면 이렇게 하고
			} catch (PasswordException e) {
				System.out.println(e.getMessage());   // 오류가 발생하면 이렇게 해라
			}
			
			password = "abcd";          // 5자 미만인 경우
			try {
				test.setPassword(password);
				System.out.println("오류 없음2");
			} catch (PasswordException e) {
				System.out.println(e.getMessage());
			}
			
			password = "abcde";         // 문자로만 되어 있는 경우
			try {
				test.setPassword(password);
				System.out.println("오류 없음3");
			} catch (PasswordException e) {
				System.out.println(e.getMessage());
			}
			
			password = "abcde#1";       // 정상인 경우
			try {
				test.setPassword(password);
				System.out.println("오류 없음4");
			} catch (PasswordException e) {
				System.out.println(e.getMessage());
			}
		}
}
Comments