어제 오늘 내일

[Java] try-catch-finally 사용법 본문

IT/Java

[Java] try-catch-finally 사용법

hi.anna 2026. 1. 1. 00:52

Java에서 try-catch-finally는 실행 중 발생할 수 있는 예외(Exception)를 안전하게 처리해
프로그램이 갑자기 종료되지 않도록 돕는 구조입니다.
예외 상황이 발생해도 안정적인 흐름을 유지하는 데 필수적인 문법입니다.

 

1. 기본 구조

try {
    // 예외가 발생할 수 있는 코드
} catch (ExceptionType e) {
    // 예외가 발생했을 때 실행되는 코드
} finally {
    // 예외 발생 여부와 상관없이 항상 실행
}

각 블록의 의미

  • try: 예외가 발생할 가능성이 있는 코드 실행
  • catch: 특정 예외가 발생했을 때 처리
  • finally: 예외 발생 여부와 관계없이 무조건 실행 (자원 정리용)

 

2. try-catch 기본 예제

try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없습니다.");
}

출력:

0으로 나눌 수 없습니다.

설명

  • 10 / 0 은 ArithmeticException 발생
  • catch 블록이 실행되어 오류 메시지 출력

 

3. finally 블록 사용 예제

finally는 예외가 발생하든 말든 반드시 실행되는 블록입니다.

try {
    System.out.println("파일 읽기 시도");
} catch (Exception e) {
    System.out.println("오류 발생");
} finally {
    System.out.println("자원 정리 실행");
}

출력:

파일 읽기 시도
자원 정리 실행

설명

  • catch 실행 여부와 상관없이 finally는 항상 실행됨
  • 파일/DB 연결 해제 등 자원 정리에 주로 사용됨

 

4. 여러 예외를 처리하는 방법 (멀티 캐치)

try문에서 여러 종류의 예외가 발생할 수 있다면 catch문을 여러 개 둘 수 있습니다.

try {
    int num = Integer.parseInt("abc");
    int result = 10 / num;
} catch (NumberFormatException e) {
    System.out.println("숫자로 변환할 수 없습니다.");
} catch (ArithmeticException e) {
    System.out.println("계산 중 오류 발생");
}

설명

  • 예외 타입에 맞는 catch 블록만 실행됨

 

5. 하나의 catch에서 여러 예외 처리하기 (Java 7+)

try {
    String s = null;
    System.out.println(s.length());
} catch (NullPointerException | IllegalArgumentException e) {
    System.out.println("예외 발생: " + e.getClass().getSimpleName());
}

설명

  • |를 사용해 여러 예외를 한 번에 처리 가능

 

6. finally 없이 try-catch만 사용하는 경우

try {
    int result = 5 / 0;
} catch (ArithmeticException e) {
    System.out.println("잘못된 계산");
}

문제 없음.
finally는 선택 요소이며 반드시 필요하지는 않습니다.

 

7. finally 없이 try-finally만 쓰는 경우

catch 없이 try-finally만 사용하는 경우도 있습니다.
예외를 직접 처리하지 않고, 자원만 정리하고 싶을 때 사용됩니다.

try {
    System.out.println("작업 실행");
} finally {
    System.out.println("무조건 실행");
}

 

 

8. 자주 사용하는 패턴: 파일/DB 자원 정리

FileInputStream fis = null;

try {
    fis = new FileInputStream("test.txt");
    int data = fis.read();
} catch (IOException e) {
    System.out.println("파일 읽기 오류");
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (IOException e) {
            System.out.println("파일 닫기 실패");
        }
    }
}

설명

  • 예외 여부와 상관없이 파일 스트림을 닫아야 함
  • finally가 자원 정리에 매우 적합한 이유

 

9. try-with-resources (대체 방식, 참고)

Java 7 이후에는 finally 없이도 자동으로 자원을 닫을 수 있음.

try (FileInputStream fis = new FileInputStream("test.txt")) {
    int data = fis.read();
} catch (IOException e) {
    System.out.println("오류");
}

 

 

10. 정리

  • try: 예외가 발생할 수 있는 코드
  • catch: 예외 처리
  • finally: 예외 발생 여부와 관계없이 항상 실행
  • 여러 예외는 여러 catch 또는 멀티캐치로 처리 가능
  • 자원 정리는 finally 또는 try-with-resources가 가장 적합

 

반응형
Comments