이것이 자바다 챕터 11 예외처리 참고
예외 처리를 제대로 배우기 전에는 단순히 원래 존재하던 예외 클래스 혹은 가장 상위 클래스인 Exception 클래스만 catch 해서 문구를 출력하게 했었다
하지만 이번에 배운 예외클래스 만들어서 써보기가 일어날 수 있는 예외들을 관리하기 좋을거 같다는 생각이 들었다.🤔
그래서 기존에 만들었던 클래스 배열을 선언해 회원가입/로그인 기능을 구현했던 프로그램에 살을 붙여서 완성도를 높여보았다 😁
클래스 배열을 이용한 로그인/회원가입 기능 만들어보기 < 에서 구조를 바꿔보았다.🙌
해당 기능들로 인해 발생할 수 있는 예외들은 이렇다.
이것 말고 상위 Exception 클래스를 사용하지 않고 직접 정의할 수 있는 예외들은 뭐가 있을까? 하고 생각해보았다.🤔
이렇게 예외를 정의해서 발생시키면, 단순히 매번 메소드에 if/else 를 넣어 조건 작성과 함께 문구를 출력하게 할 필요도 없고, 좀더 튼튼한 구조로 프로그래밍을 할 수 있을것 같다는 생각이 들었다.
일단 모든 메인 클래스에서 구현했던 기능들은 따로 밖으로 빼둬서 해당 기능의 메소드를 만들어주었다.
이렇게 따로 메소드를 먼저 선언해준 후에,
내가 새로 정의할 예외들의 클래스를 선언해주었다.
public static class noElementsException extends Exception{
public noElementsException(){
};
public noElementsException(String message){
super(message);
}
}
이렇게 일반 예외에서 상속받아 noElementsException 이라는 예외 클래스를 생성해주었다.
이 예외는 아까 언급했던 숫자,대문자(특수문자는 아직 안배워서 .. ㅈㅅ ㅎㅎ;;) 가 비밀번호에 포함되있지 않을때 발생시킬 예외이다.
본인만의 예외 클래스를 선언할땐 이렇게 생성자를 두개를 만들어 두번째 생성자에는 출력할 메세지를 담을 수 있게 매개변수를 넣어주고 상위 클래스인 Exception 을 상속받았으니 super(); 를 붙여주자 😗
public static class cannotFoundException extends Exception{
public cannotFoundException(){
};
public cannotFoundException(String message){
super(message);
}
}
이렇게 모든 배열 인덱스에 내가 입력한 아이디가 존재하지 않을때 발생시킬 예외 클래스도 선언해주었다.
이렇게 각각의 나만의 예외 클래스를 선언해주고
이렇게 0부터9를 포함하지 않거나 대문자/소문자를 포함하지 않으면 예외를 발생하게 했다. 예외 발생은 객체 인스턴스 생성할때랑 비슷하게 생성자에 출력할 문구를 집어넣고 앞에 throw 만 붙이면 끝이다 😉
이렇게만 끝내면 .. 저 문구가 출력되고 다시 메인으로 돌아오는게 아닌 저 이름의 예외가 발생하고, 문구가 출력되고 프로그램이 종료된다.
그래서? 메소드 호출 블록에 try-catch 를 추가해줘서 예외처리를 해주면 된다!
이렇게 try 블록에 해당 예외를 발생시킨 메소드를 넣어주고 catch 블록엔 내가 발생시켰던 예외에 입력한 문구를 출력시킬 getMassage() 매소드를 호출해서 선언해주면 된다.
그러면 ?
이렇게 비밀번호에 숫자,대문자,소문자를 포함시켜야만 아이디가 생성되고,
아이디가 존재하지 않을때 오류가 발생하며 종료되지 않고 문구만 출력되고 메인으로 돌아오게 된다 ! 🤩 (마찬가지로 로그인에 cannotFoundException 과 NullPointerException 을 추가해서 아이디가 존재하지 않거나 가입된 아이디가 없으면 가입된 아이디가 없다는 문구를 출력해 메인으로 돌아오게 했다.)
마찬가지로 계정을 생성할때에도 가입 허용된 계정의 개수가 10개 인데, 10개를 초과했을때 오류가 나며 종료되는게 아닌 noMoreException 클래스를 선언해서 마찬가지로 가입을 할 수 없다는 문구를 출력하게 만들었다. 😎
이렇게 이미 선언되있는 예외 클래스들을 내가 알아보기 편하게 이름을 붙여주기 위해 재정의를 하거나, 단순히 if에 조건을 달고 , 일일히 출력하는 번거로움을 덜어주기 위해 새로운 예외를 정의해서 조건을 부여하는 식으로 풀어나갈 수 있다.
이런식으로 본인이 구현해놨던 프로그램에 살을 붙이거나 , 코드 자체를 깔끔하게 정리하거나 할때 써보면 좋은 기능인것 같다 ㅎㅎ😁
예외처리를 알기전에는 일일이 if 로 모든 케이스를 작성해서 결국에 또 내가 상상하지 못했던 부분에서 오류가 나서 종류되는 경우가 빈번했는데,
예외처리로 단순히 Exception 만 붙여서 "잘못된 접근입니다." 만 출력되게 해도 갑자기 프로그램이 종료되는 일은 없게됐다..😎
갑자기 새로운걸 다시 만들기보다는 배운걸 이렇게 기존에 만들어놓은것에 추가하는식으로 학습해보면 어떨까 해서 정리도 할겸 글을 써봤는데 혹시나 읽는 분이 계신다면 도움이 됐으면 좋겠네요~ 감사합니다.