본문 바로가기
Language/Java

자바 예외처리 종류 및 예제

by wakestand 2019. 11. 11.
반응형

위 스크린샷의 내용은 int 타입의 배열 i에 1,2,3을 넣은 뒤 파라미터 j를 받아

i 배열의 j번째 값을 호출하는 메소드인데

 

보면 1,2,3만 넣었으므로 배열의 크기는 3이고

배열의 4번째 값을 호출하려고 하니 예외가 발생하는 것이 보인다

 

이제 이러한 예외가 발생했을 경우 예외처리 방법은 총 3가지가 있는데

 

1. try {} catch {} 사용

2. throws 사용

3. throw 사용

 

차례대로 한번 알아보자

 

가장 먼저  try {} catch {}를 사용하는 방법인데

예외가 발생할만한 위치를 try {} 로 감싼다

 

이후 예외가 발생할 경우에는 catch(예외명) {} 에서 처리하게 되는데

내 경우에는 ArrayIndexOutOfBoundsException 만 처리할 생각으로

ArrayIndexOutOfBoundsException e를 넣었지만

 

모든 예외를 다 한곳에서 처리하고 싶을 경우에는

Exception e를 넣어주면 된다

 

printstacktrace() 메소드는 에러 내용을 출력하는데 사용된다

 

이후 finally {}는 예외 여부와 상관없이 무조건 수행하는 문장인데

finally는 추가하지 않아도 된다

 

이제 코드를 한번 읽어보자면 try {} 영역 안에서 예외가 발생할 시

catch() {}에 지정한 예외처리 부문으로 이동하여 예외 처리를 하게 되고

마지막으로 finally {} 를 수행하며 끝이 나게 된다

 

다음으로는 throws를 이용하여 예외를 처리하는 방법인데

throws는 예외가 발생한 곳에서 처리하는 것이 아니라

예외가 발생할 코드를 호출한 곳에서 예외를 처리한다

 

즉 메소드에 throws 예외명을 넣어주면

처음 메소드를 호출한 et.call(4); 에서 try {} catch(){} 문을 작성하는 것이다

 

마지막으로는 throw를 이용한 예외 처리인데

throw를 이용하여 커스텀 예외처리를 할 수 있다

 

먼저 예외처리를 할 클래스를 하나 만들어야 하는데

여기서는 CustomException이다

 

extends Exception을 한 후에

생성자에서 바로 CustomException에서 에러 처리가 뜨게 해 놓았다

 

이후 사용할 클래스에서 throw new 예외처리클래스명(); 을 통해 사용할 수 있다

 

이제 정리해보자면

 

예외처리는

1. 실제 사용하는 곳에서 try {} catch(){}를 사용하거나

2. throws를 이용해 호출한 곳에서 try{} catch(){}를 사용하거나

3. throw new 클래스명(); 을 통해 다른 클래스에서 예외처리하는 방법이 있다

 

사용한 코드들은 아래와 같다

 

// try{} catch(){} 예외처리 예제
public class ExceptionTest {
	
	public void call(int j) {
		
		try {
			int[] i = {1,2,3}; // int 타입의 배열 i 초기화
			System.out.println("call value : " + i[j]); // 배열 i의 j번째 값 불러오기
		} catch(ArrayIndexOutOfBoundsException e) { // ArrayIndexOutOfBoundsException exception 발생 시 수행
			System.out.println("배열 크기에 맞는 값을 입력하세요!");
			e.printStackTrace(); // 에러 내용 출력
		} finally { // Exception 여부와 상관없이 수행
			System.out.println("해당 문장은 무조건 수행");
		}
		
	}

	public static void main(String[] args) {
		ExceptionTest et = new ExceptionTest(); // 객체화
		et.call(4); // call 메소드 호출
	}

}
// throws 예외처리 예제
public class ExceptionTest {
	
	public void call(int j) throws ArrayIndexOutOfBoundsException { // throws는 호출한 곳에서 예외처리
		
		int[] i = {1,2,3}; // int 타입의 배열 i 초기화
		System.out.println("call value : " + i[j]); // 배열 i의 j번째 값 불러오기
		
	}

	public static void main(String[] args) {
		ExceptionTest et = new ExceptionTest(); // 객체화
		try {
			et.call(4); // call 메소드 호출
		} catch(ArrayIndexOutOfBoundsException e) { // ArrayIndexOutOfBoundsException exception 발생 시 수행
			System.out.println("배열 크기에 맞는 값을 입력하세요!");
			e.printStackTrace(); // 에러 내용 출력
		} finally { // Exception 여부와 상관없이 수행
			System.out.println("해당 문장은 무조건 수행");
		}		
		
	}

}
// throw 예외처리 예제(클래스)
public class CustomException extends Exception {
	
	public CustomException() {
		System.out.println("CustomException에서 예외 처리");
	}

}
// throw 예외처리 예제(실 사용)
public class ExceptionTest {
	
	public static void main(String[] args) {
		try {
			throw new CustomException(); // CustomException 클래스에서 예외 처리
		} catch(Exception e) {
			// CustomException() 외의 예외 처리
		}
	}

}
반응형

댓글