본문 바로가기
{Java}

21.07.30{코딩일기} java 예외처리 InputMismatchException 예시코드

by Davey 2021. 7. 30.
728x90
자바예외처리를 오늘에서야
드디어 제대로 사용해볼 수 있었다


결론부터 말하자면,
수많은 예외가 있지만 
나는 오늘
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.

728x90

댓글