예외 처리 (Exception Handling)

김민석·2023년 8월 8일
0

문제(예외)가 발생해도 프로그램이 중간에 멈추지 않게 처리하는 것

예외 처리 방법

1) Exception이 발생한 곳에서 직접 처리

try ~ catch문을 이용하여 예외 처리하기

  • try : Exception 발생할 가능성이 있는 코드를 안에 기술한다.
  • catch : try 구문에서 Exception 발생 시 해당하는 Exception에 대한 처리 기술이다. 여러 개의 Exception 처리가 가능하나 Exception간의 상속 관계 고려해야 한다.
  • finally : Exception 발생 여부와 관계없이 꼭 처리해야 하는 로직을 기술한다. 중간에 return문을 만나도 finally구문은 실행되지만 System.exit();를 만나면 무조건 프로그램이 종료된다. 주로 java.io나 java.sql 패키지의 메소드 처리 시 이용한다.

ex)

public void method() {
	BufferedReader br = null;
	try {
		br = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("입력 : ");
		String str = br.readLine();
		System.out.println("입력된 문자열 : " + str);
	} catch (IOException e) {
	e.printStackTrace();
	} finally {
		try {
			System.out.println("BufferedReader 반환");
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

2) Exception 처리를 호출한 메소드에게 위임
메소드 선언 시 throws Exception명을 추가하여 호출한 상위 메소드에게 처리를 위임한다. 계속 위임하면 main( ) 메서드 까지 위임하게 되고 거기서도 처리되지 않는 경우 프로그램이 비정상 종료된다.

  • throws
    메서드에 발생한 예외를 호출한 곳으로 던진다.
    다형성이 적용된다.
    throws 옆에 던지려는 예외를 여러 개 작성할 수 있다.

ex)

public static void main(String[] args) {
	ThrowsTest tt = new ThrowsTest();
	try {
		tt.methodA();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		System.out.println("프로그램 종료");
	}
}
public void methodA() throws IOException {
	methodB();
}
public void methodB() throws IOException {
	methodC();
}
public void methodC() throws IOException {
	throw new IOException(); // IOException 강제 발생
}

오버라이딩 시 예외(throws) 방법

  • 부모와 똑같이 메서드를 작성한다.
  • 사용하는 Exception클래스의 자식을 작성한다.
  • 오버라이딩 시 throws하는 Exception의 개수와 상관없이 처리 범위가 같거나 후손이여야 함

0개의 댓글