Java/Java의 정석

[Java의 정석] 08. 예외 처리

동현 유 2022. 3. 17. 10:54
모르는 것만 짧고 빠르게 정리한 노트입니다.
1.1 프로그램 오류

 

  • 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
  • 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

 

1.2 예외 클래스

  : Exceptionchecked Exceptionunchecked Exception 으로 나뉜다.  unchecked Exception 은 보통 프로그래머의 실수에 의해 발생하고, checked Exception 은 어플리케이션 외적인 요인으로 발생한다.

  

 

1.3 메서드에 예외 선언하기

 

  • main 에서도 예외가 처리되지 않으면, 프로그램이 종료된다.

 

1.9 자동 자원 반환 try with resources 문
try (FileInputStream fis = new FileInputStream("score.dat");
     DataInputStream dis = new DataInputStream(fis)) {  // python with 랑 같은 용도인듯
     
    while(true) {
        score = dis.readInt();
        System.out.pringln(score);
        sum += score;
    }

} catch (EOFException e) {
    System.out.println("점수의 총합은 " + sum + "입니다.");
} catch (IOException ie) {
    ie.printStackTrace();
}​
  • 자동으로 close 를 호출한다. (finally 안에서 try catch 로 close 를 하는 것과 같은 형태)
  • AutoCloseable 인터페이스를 구현해야한다.
  • close 호출 시 에러가 나면, suppressed exception 을 출력한다. 에러는 한번에 하나만 호출할 수 있다. 따라서 close 는 finally 에서 가장 마지막에 에러가 나는 경우이므로, 가장 먼저 발생한 에러 안에 저장된다.

 

1.11 예외 되던지기

 

  • finally 블럭 내에서도 return 을 사용하면, try 블럭이나 catch 블럭의 return문 다음에 수행된다.

 

1.12 연결된 예외

 

  • 여러 예외를 하나의 큰 분류의 예외로 묶어서 다루기 위해 사용
  • checked 예외를 unchecked 예외로 바꿀 때 사용
try {
    startInstall();   // SpaceException 발생
    copyFiles();
} catch (SpaceException e) {    
    InstallException id = new InstallException("설치 중 예외 발생")
    ie.initCause(e);
    throw id;
}
static void startInstall() throws SpaceException, MemoryException {
    if (!enoughSpace())
        throw new SpaceException("설치할 공간이 부족합니다.");
    if (!enoughMemory())
        throw new MemoryException("메모리가 부족합니다.");
}

static void startInstall() throws SpaceException {
    if (!enoughSpace())
        throw new SpaceException("설치할 공간이 부족합니다.");
    if (!enoughMemory())
        throw new RuntimeException(new MemoryException("메모리가 부족합니다."));
}