본문 바로가기

언어 기초/JAVA

[자바의정석 | Chapter 08 예외처리] try - catch

1. 학습목표

예외처리에 대해 이해할 수 있다.

2.필요 개념 문장정리

프로그램 오류

  • 컴파일 에러는 컴파일 할 때 발생하는 에러이고 프로그램의 실행 도중에 발생하는 에러를 런타임 에러라고 한다.
  • 실행시 발생할 수 있는 프로그램 오류를 에러와 예외 두가지로 구분한다.
  • 에러는 메모리부족이나 스택오버플로우와 같이 일단 발생하면 복구할 수 없는 심각한 오류이고 예외는 발생하더라도 수습될 수 있는 비교적 덜 심각한 것이다.

try - catch 문

  • 예외처리란 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며 예외처리의 목적은 예외의 발생으로 인한 실행 중인 프로그램의 갑작스런 비정상 종료를 막고 정상적인 실행상태를 유지할 수 있도록 하는 것이다.
  • try {
    // 예외가 발생할 가능성이 있는 문장들을 넣는다
    }catch (Exception e) {
    // 예외가 발생했을 때 처리하기 위한 문장을 적는다.
  • 예외가 발생한 경우와 발생하지 않은 경우 문장의 실행순서가 달라진다.
  • try블럭에서 예외가 발생하면 예외가 발생한 위치 이후에 있는 try블럭의 문장들은 수행되지 않고 예외가 발생하지 않으면 catch블럭의 문장들을 수행하지 않는다.
  • catch문에 Exception클래스 타입의 참조변수를 선언한 catch블럭을 사용하면 어떤 종류의 예외가 발생하더라도 catch블럭에 의해 처리된다.
  • printStackTrace() : 예외 발생 당시의 호출스택에 있던 메서드의 정보와 예외메세지를 화면에 출력한다.
    getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

 3. 코드작성

import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        File file = new File("example.txt");

        try {
            FileReader reader = new FileReader(file);
            // 파일을 읽어오는 동작 수행
        } catch (FileNotFoundException e) {
            // FileNotFoundException 발생 시 실행되는 블록
            System.out.println("파일을 찾을 수 없습니다.");
            e.printStackTrace(); // 예외 스택 트레이스 출력
            System.out.println("에러 메시지: " + e.getMessage()); // 예외 메시지 출력
        } catch (IOException e) {
            // IOException 발생 시 실행되는 블록
            System.out.println("파일을 읽어오는 도중 오류가 발생했습니다.");
            e.printStackTrace();
            System.out.println("에러 메시지: " + e.getMessage());
        } finally {
            // 파일을 닫거나 기타 정리 작업을 수행하는 블록
            System.out.println("파일 처리 완료");
        }
    }
}

4. 마무리

e.getMessage()에 대해 어떻게 메세지가 던져지는 건지 아직 제대로 이해하지 못했다.

Throwable 클래스에서 상속된 메서드로서 예외 객체에 어떻게 지정된 메세지가 던져지는지 더 공부해봐야겠다.