결론부터 말하자면, 수많은 예외가 있지만 나는 오늘 InputMismatchException를 import해서 적용시켜보았다.
문제상황
해결책
사용자가 숫자가 아닌 문자를 입력했다.
try { .... 생략 ..
} catch (InputMismatchException e) { ..... }
# 예제 코드
int inputCheckedKey = 0;
int inputLimitTimes = 0;
try {
do {
Scanner input1 = new Scanner(System.in);
System.out.println("꧁༺RunDino 아케이드로 초대합니다.༻꧂");
System.out.println(" 접속을 원하시면 1을 입력해주세요");
// 유저 입력값은 기본적으로 String타입으로 받는다.
int _input = input1.nextInt();
// do문에선 지역변수만 사용가능 멤버변수 호출안됨
if( _input != 1) {
System.out.println("잘못된 입력키입니다. 1을 입력해주세요.(입력제한횟수 : 5회)");
inputLimitTimes++;
} else if (_input == 1) {
inputCheckedKey++;
} else if (inputLimitTimes > 4) {
System.out.println("입력횟수를 초과하였습니다. RunDino 아케이드를 종료합니다.");
} else {
inputLimitTimes++;
}
} while (inputCheckedKey < 1);
System.out.println("꧁༺Welcome to RunDino༻꧂");
} catch( InputMismatchException e) {
System.out.println("문자는 입력할 수 없습니다. 숫자로 입력해주세요:)");
}
# 출력 결과
이상한 문장을 입력하니 아주 예외처리 깔금하걸 확인 할 수 있다.
# 만약 예외처리 클래스를 부모클래스에서 바로 상속받는다면?
일단 결론부터 말하자면 매번 모든 클래스에 try cath문을 걸 필요가 없어진다.
코드가 훨씬 깔끔해진다 = 중복이 줄어든다.
Exception을 throws를 본적 있는가? 클래스를 설계하다보면 수많은 클래스에 매번 동일한 예외처리를 입력하기가 번거로워진다. 즉 코드중복을 줄이고 싶어진다. 이때 아래와 같이 해당예외처리 클래스를 호출하여 ( 주로, 이 개념을 상속이라고도 표현하지만 확장의 개념이므로 호출이 더 올바른 표현이다) 사용하는 사용자측으로 넘겨버려주면 끝!
결국 이 예외처리클래스들도 하나의 개별적인 클래스이므로 Arcade클래스가 InputMismatchExceiption에 예외처리 메소드를 요청하겠다는 구문이다.
이때 주의해야 할점이 있다. 일반적으로 클래스 하나만 상속받을 수 있기 때문에 주의 부모클래스에다가 해당 예외클래스를 상속받는게 베스트. 아래 그림을 참조하자:)
모든클래스는 항상 하나의 클래스만 상속받을 수 있다. 인터페이스는 예외지만 이와 관련된 내용은 추후 포스팅하겠다.
Copyright ⓒ 2021 by bluevulpe All Contents cannot be copied without permission.
댓글