코딩이란 무엇일까

Java/자바 [20일차] (2)-예외 처리 본문

국비지원수업

Java/자바 [20일차] (2)-예외 처리

둥구는 지굴다 2022. 11. 19. 19:11
🌍글을 읽기 전 필자는 아직 코딩을 배우는 단계이므로 글의 내용이 부정확할 수 있습니다.

여러 가지 글과 책, 수업을 바탕으로 정리한 내용이니 알맞지 않은 내용이 있다면 댓글 남겨주시면 수정하겠습니다.

예외 처리

예외 처리(Exception handling)란?

예외가 발생했을 때 이를 적절히 처리하여 프로그램이 비정상적으로 종료되는 것을 막는 방법을 말합니다.


try-catch-finally

 예외 발생 시, 적절하게 처리하기 위해 자바에서 제공하는 예외 처리 문법입니다.

[try-catch문 구조]

try{
//예외가 발생할 수 있는 명령
}catch(발생할 수 있는 예외 클래스명){
//예외가 발생했을 시 실행할 명령
}


try-catch문 사용

Scanner sc= new Scanner(System.in);
try {
		System.out.print("숫자를 입력해 주세요:");
		int cnt =Integer.parseInt(sc.nextLine());
		int sum=0;
		for(int i=0;i<=cnt;i++) {
			sum+=i;
		}
		System.out.println(sum);
	}catch(NumberFormatException e){
		System.out.println("잘못된 문자열 입력했습니다.");
		System.out.println(e.getMessage());

사용자에게 정수 값을 입력을 받아 0부터 입력받은 값을 더해주는 코드입니다.

하지만 사용자가 정수가 아닌 실수, 문자열과 같이 정수가 아닌 값을 입력하면

NumberFormatException 이 발생하기 때문에

catch문에  NumberFormatException e을 작성해 주었습니다.

추가적으로 e.getMessage( ) 메서드는 예외 정보를 문자열로 반환합니다.

출력 결과

catch문에  ( ) 안에는 Exception e가 올 수도 있습니다.

Exception클래스는 모든 예외 클래스의 상위 클래스이기 때문에 가능합니다.


다중 catch문

위의 try-catch문 사용 코드를 보면

위의 코드를 보면

정수값을 입력받아야 하는데 정수 값이 아닌 다른 값이 오는

NumberFormatException 이 발생할 수도 있고

아무 값도 작성을 하지 않고 변수를 참조하면

NullPointerException이 발생할 수도 있습니다.

이와 같이 try문에는 다양한 예외가 발생할 수 있습니다.

이 경우 발생되는 예외별로 예외 처리 코드를 다르게 하기 위해서

다중 catch블록을 작성할 수 있습니다.

try{
//예외가 발생할 수 있는 명령
}catch(발생할 수 있는 예외 클래스명){
//예외가 발생했을 시 실행할 명령
}
}catch(발생할 수 있는 예외 클래스명){
//예외가 발생했을 시 실행할 명령
}

다중 catch 순서

다중 catch블록을 작성할 때 주의해야 할 점은

상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 합니다.

예를 들어 모든 예외의 상위 클래스인 Exception을

다중 catch문의 맨 위에 작성한다면 어떠한 에러가 나도 첫 번째 catch블록만 실행되고

아래의 catch블록은 실행되지 않게 되기 때문에 주의해주어야 합니다.


finally

finally는 try문에서 오류가 나든 안 나든 실행되는 블록입니다.

생략이 가능하며 항상 실행할 내용이 있을 경우에만 finally 블록을 작성해주면 됩니다.

finally 사용

Scanner sc= new Scanner(System.in);
		try {
				System.out.print("숫자를 입력해 주세요:");
				int cnt =Integer.parseInt(sc.nextLine());
				int sum=0;
				for(int i=0;i<=cnt;i++) {
					sum+=i;
				}
				System.out.println(sum);
			}catch(NumberFormatException e){
				System.out.println("잘못된 문자열 입력했습니다.");
				System.out.println(e.getMessage());
			}finally {
				System.out.println("오류가 나든 안나든 실행해요");
			}

출력 결과

Comments