[이것이 자바다] 11. 예외 처리

SeonJin·2023년 8월 29일
0

Java

목록 보기
7/11
post-custom-banner

📚 이것이 자바다 [개정판]


sec01. 예외와 예외 클래스

  • 에러(Error): 프로그램 코드에 의해 수습될 수 없는 심각한 오류
  • 예외(Exception): 프로그램 코드에 의해 수습될 수 있는 다소 미약한 오류
    • 일반 예외(Exception): 컴파일러가 예외 처리 코드 여부를 검사하는 예외
    • 실행 예외(Runtime Exception): 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외


sec02. 예외 처리 코드

  • 예외 발생 시 프로그램의 갑작스러운 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드
  • 생성자 내부, 메소드 내부에서 작성되며, 중괄호는 생략할 수 없다
try { 
	// 예외 발생 가능 코드
} catch(예외클래스 e) {
	// 예외 처리
} finally {
	// 항상 실행;
}

finally

  • 예외 발생여부와 관계없이 실행되어야 하는 코드 입력
  • 정상 실행 되어도,
  • 예외가 발생되어도,
  • try-catch 블록에서 return문으로 메소드를 종료해도,
    ⇒ 항상 실행된다

예외 정보를 얻는 3가지 방법

  • System.out.println(e.getMessage()); 예외가 발생한 이유 리턴
  • System.out.println(e.toString()); 예외가 발생한 이유와 예외의 종류를 리턴
  • e.printStackTrace(); 예외가 어디서 발생했는지 추적한 내용까지 출력

sec03. 예외 종류에 따른 처리

  • 다중 catch를 사용하여 발생하는 예외에 따라 예외 처리 코드를 다르게 작성할 수 있다

  • catch 블록이 여러 개여도 catch 블록은 단 하나만 실행된다
    → 하나의 예외가 발생하면 즉시 실행을 멈추고 해당 catch 블록으로 이동하기 때문이다

  • 처리할 예외 클래스들이 상속 관계에 있을 때는 하위 클래스의 catch 블록 먼저 작성한다
    → 예외 발생 시 catch 블록이 위에서부터 차례로 검사 대상이 되므로 상위 클래스가 먼저 검사 대상이 되면 하위 클래스가 모두 포함이 되기 때문이다

  • 두 개 이상의 예외를 하나의 catch 블록으로 동일하게 예외 처리하고 싶을 때
    catch(NullPointerException | NumberFormatException e) 와 같이 처리한다

sec05. 예외 떠넘기기

  • 리턴타입 메소드명(매개변수) throws 예외클래스1, 예외클래스2;
  • throws 를 통해 메소드를 호출한 곳으로 예외를 떠넘긴다
public void method2() **throws ClassNotFoundException** { // 떠넘기기
	Class.forName("java.lang.String2");
}

public void method1() {
	try {
			method2(); // method2() 호출
	} catch(ClassNotFoundException e) { // 호출한 곳에서 예외 처리
		SYstem.out.println("예외 처리: " + e.getMessage());
	}
}

sec06. 사용자 정의 예외

  • 표준 라이브러리에 존재하지 않는 예외를 직접 클래스를 정의하여 사용하는 것
public class InsufficientException extends Exception {
	public InsufficientException() { // 기본 생성자
	}
	public InsufficientException(String message) { // 예외를 입력 받는 생성자
		super(message);
	}
}
// 예외 메시지를 부모 생성자 매개값으로 넘기는데, 
// 예외 객체의 공통 메소드인 getMessage()의 리턴값으로 사용하기 위함이다

예외 발생 시키기

// 직접 try-catch문으로 처리하는 방법
void method() {
	try {
		...
		throw new Exception("예외메시지");
		...
	} catch(Exception e) {
		String message = e.getMessage();
	}
}
// 호출한 곳에 떠넘기는 방법
void method() throws Exception {
	...
	throw new Exception("예외메시지");
	...
}
profile
study notebook
post-custom-banner

0개의 댓글