[Java & SpringBoot로 시작하는 웹 프로그래밍] 5주차 학습 - 1 (예외 처리)

진문장·2021년 9월 12일
0

예외 처리

오류란 무엇인가?

  • 컴파일 오류: 프로그램 코드 작성 중 발생하는 문법적 오류
  • 실행 오류: 실행 중인 프로그램이 의도하지 않은 동작을 하거나(bug) 프로그램이 중지 되는 오류(runtime error)
  • 자바는 예외 처리를 통하여 프로그램의 비정상 종료를 막고 log를 남길 수 있음

오류와 예외 클래스

  • 시스템 오류 (error): 가상 머신에서 발생, 프로그래머가 처리 할 수 없음, 동적 메모리를 다 사용한 경우, stack over flow 등
  • 예외 (Exception): 프로그램에서 제어 할 수 있는 오류, 읽으려는 파일이 없는 경우, 네트웍이나 소켓 연결 오류 등

예외 클래스

  • 모든 예외 클래스의 최상위 클래스는 Exception 클래스이다.

try - catch 문으로 예외 처리하기

try {
  예외가 발생 할수 있는 코드 부분
} catch ( 처리할 예외 타입 e ) {
  try 블록 안에서 예외가 발생했을 때 수행되는 부분
}

try - catch - finally 문으로 예외 처리하기

try {
  예외가 발생 할수 있는 코드 부분
} catch ( 처리할 예외 타입 e ) {
  try 블록 안에서 예외가 발생했을 때 수행되는 부분
} finally {
  예외 발생 여부와 상관 없이 항상 수행 되는 부분
  리소스를 정리하는 코드를 주로 씀
}

try - with - resources 문

  • 리소스를 자동으로 해제 하도록 제공해주는 구문
  • 해당 리소스가 AutoCloseable을 구현한 경우 close()를 명시적으로 호출하지 않아도 try {} 블록에서 오픈된 리소스는 정상적인 경우나 예외가 발생한 경우 모두 자동으로 close()가 호출 됨
  • 자바 7 부터 제공 됨
  • FileInputStream 의 경우 AutoCloseable을 구현 하고 있음

예외 처리 미루기

  • throws를 사용하여 예외처리 미루기
  • try{} 블록으로 예외를 처리 하지 않고, 메서드 선언부에 throws를 추가
  • 예외가 발생한 메서드에서 예외 처리를 하지 않고 이 메서드를 호출한 곳에서 예외 처리를 한다는 의미
  • main()에서 throws를 사용하면 가상머신에서 처리됨

다중 예외 처리하기

  • 하나의 try{} 블록에서 여러 예외가 발생하는 경우 catch{} 블록 한곳에서 처리하거나 여러 catch{} 블록으로 나누어 처리 할 수 있음
  • 가장 최상위 클래스인 Exception 클래스는 가장 마지막 블록에 위치 해야 함
public static void main(String[] args) {
  ThrowsException test = new ThrowsException();
  try {
    test.loadClass("a.txt", "java.lang.String");
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

사용자 정의 예외

  • JDK 에서 제공되는 예외 클래스 외에 사용자가 필요에 의해 예외 클래스를 정의하여 사용
  • 기존 JDK 클래스에서 상속받아 예외 클래스 만듬
public class IDFormatException extends Exception {
  public IDFormatException(String message) {
    super(message);
  }
}
  • throw 키워드로 예외를 발생 시킴

0개의 댓글