[JAVA] finally 블록

finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 블록입니다.

 

finally 구조

try {
    // 코드
} catch (Exception e) {
    // 예외 처리
} finally {
    // 항상 실행되는 코드
}

위 코드에서 try 블록에서 예외가 발생하지 않으면, finally 블록이 실행됩니다. 만약 try 블록에서 예외가 발생하면, catch 블록이 실행되고, 그 다음으로 finally 블록이 실행됩니다.

 

finally 블록의 용도

  • 리소스 관리 : 파일을 열거나 데이터베이스 연결을 할 때, 리소스를 사용하게 됩니다. 이때, 리소스를 반납하지 않으면  누수가 발생하여 다른 작업을 수행할 수 없습니다.

중첩된 try-catch-finally 구조

try {
    try {
        FileInputStream fis = new FileInputStream("file.txt");
        // 파일 읽기
    } catch (IOException e) {
        // 예외 처리
    } finally {
        if (fis != null) {
            fis.close();
        }
    }
} catch (IOException e) {
    // 예외 처리
} finally {
    // 항상 실행되는 코드
}

첫 번째 try 블록에서는 파일InputStream 객체를 생성하여 파일을 읽고, 예외가 발생하면 catch 블록에서 예외를 처리합니다. 그리고 finally 블록에서는 파일InputStream 객체를 close() 메서드를 호출하여 닫습니다.

두 번째 try 블록에서는 첫 번째 try 블록에서 발생한 예외를 다시 처리합니다. 그리고 finally 블록에서는 항상 실행되는 코드를 작성합니다.

 

finally 주의사항

  • finally 블록 내에서도 예외가 발생할 수 있으므로 주의가 필요합니다.