본문 바로가기

아옳옳의 코딩공부/아옳옳 자바코딩공부

2021-04-05 자바공부 (예외처리)

728x90
반응형

나이를 입력하라고 했는데, 0보다 작은 값을 입력

나눗셈을 위한 두 개의 정수를 입력받는데, 제수로 0을 입력

주민번호 13자리를 입력하라고 했는데 중간에 - 를 포함 14자리를 입력 등의 예외 상황이 발생했을때 

 

지금까지는 if문으로 처리를 했지만 if문을 사용해 예외상황을 처리시 프로그램의 흐름인지 예외의 처리인지 

구분이 힘들어 try ~ catch문을 사용한다 

try ~ catch문

try 영역은 예외상황이 발생될거 같은 영역

catch 영역은 예외상황 처리하는 영역이다 .

finally 끝나도 무조건 실행되는 부분이다. 

 

간단한 코드를 보면서 이해를 해보자 

 

 

간단하게 5개 짜리 배열을 만들어 출력하는 상황이다. for문 안쪽을 보면 배열이 5개라 인덱스로는 0~4까지 이다 .

근데 for문은 5번 반복이 되다 보니 5다음에 오류가 발생한것이 보인다. 그리고 원래라면 for문이 끝나고 end가 출력이 되어야 하는데 출력없이 프로그램이 끝난것을 볼수 있다. 

 

그럼 try ~catch문을 사용하여 보겠다, 

자 트라이 캐치문을 사용했을때의 모습이다. 

보이는것과 아까와는 다른점이 예외 상황이 발생이 되더라도 나머지 end도 잘 찍힌것을 볼 수 있고 오류가 아닌 어떤 오류가 생긴것인지 출력되는것을 볼 수 있다.  

오류부분출력 (java.lang.ArrayIndexOutOfBoundsException:java.lang.ArrayIndexOutOfBoundsException:)

 

자 여기서 한가지더 나아가 finally문까지 붙여서 실습해보도록 하겠다. 

여기서는 예외가 발생하게 되면 catch부분에 어떤 예외상황인지 출력을해줌과 동시에 return을해서 프로그램을 종료를 하려고 했다 . 하지만 return이 실행되어도 바로 끝나지 않고 finally부분은 실행되고 end부분은 실행이 안되는것을 볼 수 있다. 

 

 

getMessage 메소드 사용후 출력결과 

 

모든 경우에 있어서 예외로 인정되는 상황을 표현하기 위한 예외 클래스는 대부분 정의가 되어 있다. 그리고 프로그램에 따라서 별도로 표현해야 하는 예외 상황에서는 예외 클래스를 직접 정의하면 된다. 

 

 

 

이런식으로 두가지의 catcㅗ블룩 구성도 가능하다.

 

마지막으로 중요한 예외클래스이다. 

기본적으로 제공되지 않는 예외상황을 내가 클래스를 만들어서 활용 할 수도 있다. 

 

코드보면서 이해하자 

public class ThrowsExeption {

		
	public static void main(String[] args) {
		try {
			int age = readAge(); //1. 메소드호출 5. AgeInputException 을 받고 catch문 실행 
			System.out.println("당신은" + age + "세입니다.");
		}catch(AgeInputException e) {
			System.out.println(e.getMessage());			
		}
	}
	//2. 나이를 불러오는 메소드 
	public static int readAge() throws AgeInputException {
		Scanner key = new Scanner(System.in);
		System.out.print("나이를 입력하세요~");
		int age = key.nextInt();
        //3. 나이를 입력헀는데 0보다 작다면 
		if(age <= 0 ) {
        	//  4. AgeInputException 클래스 만들고 이클래스를 던져 준다 
			AgeInputException excpt = new AgeInputException();
			throw excpt;
		}
		return age;
	}


AgeInputException클래스 부분 

public class AgeInputException extends Exception{
	public AgeInputException () {
		super("유효하지 않은 나이가 입력되었습니다.");
	}
}


예외가 발생되면 catch를 먼저 찾는데 catch가 없으면 throw로 던져준다  

이렇게 -20을 입력하게 되면 내가 만든 Exception을 통해 예외가 발생되는 것을 볼수 있다. 

그리고 책에서는 이러한 예외처리를 할때 로그(Log) 를 남겨 놓으라고 한다 

 

 

오늘도 공부끝! 

 

728x90
반응형