Myo-Kyeong Tech Blog

[ JAVA ] JAVA 예외 처리 (Exception) - Try-Catch-Finally 문법, 예외 메시지와 스택 추적 본문

Programming/Java

[ JAVA ] JAVA 예외 처리 (Exception) - Try-Catch-Finally 문법, 예외 메시지와 스택 추적

myo-kyeong 2023. 7. 10. 20:50
728x90
반응형

 

예외 처리 (Exception)

  • 예외(Exception) : 프로그램이 실행되는 동안 발생할 수 있는 비정상적인 조건이나 오류 상황
  • 프로그램 실행 중에 발생할 수 있는 예외 상황을 대비하여 프로그램이 중단되지 않고 정상적으로 계속 실행될 수 있도록 하는 것 

 

Try-Catch-Finally 문법

  • try{} : 예외가 발생할 수 있는 코드
  • catch(예외 유형 변수){} : 예외를 처리하는 코드
  • finally {} : 마무리를 수행하는 코드, 항상 실행되는 코드 
try {
    // 예외가 발생할 수 있는 코드
} catch (ExceptionType1 e) {
    // ExceptionType1 예외가 발생했을 때 처리할 코드
} catch (ExceptionType2 e) {
    // ExceptionType2 예외가 발생했을 때 처리할 코드
} finally {
    // 예외 발생 여부와 관계없이 항상 실행될 코드
}

"try" 블록에는 예외 발생 가능성이 있는 코드를 작성합니다. 이 블록에서 예외가 발생하면, 즉시 catch되어 해당 예외에 맞는 "catch" 블록으로 이동합니다. 각 "catch" 블록은 발생 가능한 예외 유형에 따라 처리 방법을 지정하며, 하나의 "try" 블록에 여러 개의 "catch" 블록이 존재할 수 있습니다.

"finally" 블록은 "try-catch" 블록 이후에 수행되는 코드를 포함하며, 이 블록에 위치한 코드는 예외 발생 여부에 관계없이 항상 실행됩니다. 일반적으로 "finally" 블록에서는 사용된 리소스의 해제, 연결 종료와 같은 '마무리' 작업을 수행하는 코드를 작성합니다.

 

Try-Catch-Finally 예제 

파일 처리 시에 파일이 존재하지 않거나, 파일 열기에 실패하는 등의 여러 예외 상황이 발생할 수 있습니다. 

File file = new File("path_to_file");
FileReader fr = new FileReader(file);

 

만일 "path_to_file" 파일이 존재하지 않은 경우 위의 코드를 실행하면 "FileNotFoundException" 에러가 발생하고 프로그램이 바로 종료됩니다. 

try {
    File file = new File("path_to_file");
    FileReader fr = new FileReader(file);
} catch (FileNotFoundException e) {
    // 파일이 없는 경우에 대한 예외 처리
    System.out.println("File not found: " + e.getMessage());
} finally {
    // 필요한 경우, 여기에서 자원을 해제하는 코드를 작성할 수 있습니다.
}

위의 코드는 "FileNotFoundException" 에러가 발생할 경우 적절한 메시지를 출력하고 에러로 인하여 프로그램이 강제 종료되지 않고 계속 실행되도록 예외 처리한 코드입니다. 

 

예외 메시지와 스택 추적

예외가 발생하면 예외의 원인 메시지와 함께 스택 추적 정보를 출력할 수 있습니다. 

  • 'getMessage()' : 발생한 예외에 대한 상세한 정보를 문자열(String) 형태로 반환. 
  • 'printStackTrace()' : 예외가 발생한 지점부터 호출 스택을 거슬러 올라가며 메서드 호출 정보 출력
try {
  // 코드
} catch (Exception e) {
  System.out.println(e.getMessage()); // 예외 메시지
  e.printStackTrace(); // 스택 추적 정보
}

 

위에서 설명한 존재하지 않은 파일을 여는 'FileNotFoundException' 예외의 경우 다음과 같이 코드를 작성할 수 있습니다. 

try {
    FileReader fr = new FileReader("nonexistentfile.txt");
} catch (FileNotFoundException e) {
    System.out.println(e.getMessage()); // getMessage() 메서드를 사용하여 예외 메시지를 출력합니다.
    e.printStackTrace(); // printStackTrace() 메서드를 사용하여 예외가 발생한 스택 트레이스를 출력합니다.
}

 

  • getMessage() 메서드의 경우, "nonexistentfile.txt (지정된 파일을 찾을 수 없습니다)"와 같은 메시지를 출력하며 발생한 예외에 대한 자세한 정보를 제공
  • printStackTrace() 메서드의 경우, 예외가 발생한 지점부터 호출 스택을 거슬러 올라가며 메서드 호출 정보를 출력
java.io.FileNotFoundException: nonexistentfile.txt (지정된 파일을 찾을 수 없습니다)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    (더 많은 스택 트레이스 출력...)

 

이와 같이 getMessage() 메서드는 예외의 상세 정보를, printStackTrace() 메서드는 예외가 발생한 위치와 호출 스택을 출력하여, 이를 통해 프로그램에서 예외가 발생한 원인과 위치를 찾는 데 도움을 줍니다.

728x90
반응형