📚 학습 기록/Java 기초 & 중급

🔥 [25.02.26][Java] 예외 처리 – finally 완벽 정리!

zenjoydev 2025. 2. 28. 23:24

💻 자바 예외 처리 중에서 특히 finally 블록의 역할과 활용법을 자세히 살펴보겠습니다!
이번 글에서는 try-catch-finally, try-finally, 그리고 throw vs throws의 차이를 명확하게 정리할게요.

"예외도 결국 객체다! 실무에서 꼭 필요한 예외 처리 개념, 제대로 정리해 봅시다."


✅ 예외도 결국 객체!

자바에서 예외(Exception)도 객체입니다.
즉, 필드와 메서드를 가질 수 있고, 오류 코드와 메시지를 담을 수 있죠.
이 정보를 잘 활용하면 더 효과적인 예외 처리가 가능합니다!

예제 코드로 확인해볼까요?

public class CustomException extends Exception {
    private int errorCode;

    public CustomException(String message, int errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public int getErrorCode() {
        return errorCode;
    }
}

👉 이렇게 예외 객체를 만들면 예외 발생 시 더 풍부한 정보를 제공할 수 있어요!


🔹 finally 블록이 중요한 이유

1️⃣ finally는 반드시 실행됨!

try-catch-finally에서 예외 발생 여부와 관계없이 finally 블록은 무조건 실행됩니다.
주로 자원 해제(파일 닫기, DB 연결 해제) 등에 사용하죠.

try {
    FileWriter file = new FileWriter("test.txt");
    file.write("Hello, Java!");
} catch (IOException e) {
    e.printStackTrace();
} finally {
    System.out.println("파일 작업이 끝났습니다!");
}

📌 포인트!

  • 예외 발생 여부와 관계없이 반드시 실행됨
  • 자원 해제에 유용함 (파일, 네트워크, DB 연결 등)

🔹 try-finally vs try-catch-finally

1️⃣ try-catch-finally

  • 예외를 처리하면서 자원 해제도 함께 가능
  • 실무에서 가장 많이 쓰는 방식
  •  
try {
    System.out.println("코드 실행 중...");
    throw new Exception("예외 발생!");
} catch (Exception e) {
    System.out.println("예외 처리 완료");
} finally {
    System.out.println("항상 실행됨");
}

코드 실행 중...
예외 처리 완료
항상 실행됨

2️⃣ try-finally

  • 예외 처리는 하지 않고 무조건 마무리 작업만 수행
  • 예외를 무시하고도 특정 작업을 수행해야 할 때 사용
  •  
try {
    System.out.println("코드 실행 중...");
    throw new Exception("예외 발생!");
} finally {
    System.out.println("항상 실행됨");
}

코드 실행 중...
항상 실행됨
Exception in thread "main" 예외 발생!

 

📌 실무 팁!

  • 예외가 발생해도 무조건 실행해야 하는 코드(예: 로그 저장, 연결 해제 등)는 finally에 작성
  • 예외를 직접 처리해야 하면 catch 블록 추가

🔥 throw vs throws 차이점 완벽 정리!

구분throwthrows

역할 예외 발생 예외를 호출한 곳으로 넘김
사용 위치 메서드 내부 메서드 선언부
사용 대상 Exception 객체 예외 클래스

📌 예제 코드로 차이점 쉽게 이해하기!

// throw 사용 예제 (직접 예외 발생)
public void checkAge(int age) {
    if (age < 18) {
        throw new IllegalArgumentException("18세 이상만 가능합니다!");
    }
}

// throws 사용 예제 (예외를 호출한 곳으로 넘김)
public void readFile() throws IOException {
    FileReader file = new FileReader("test.txt");
}

📌 실무에서 throws를 남발하면?

  • 컴파일러 체크 기능이 무력화
  • 중요한 예외를 놓칠 위험이 커짐
  • 해결할 수 있는 예외는 직접 처리하는 것이 좋음!

📝 실무에서 예외 처리할 때 주의할 점

✔️ 예외 메시지를 신경 써서 작성하기!

  • 실무에서는 Exception e만 출력하면 안 되고,
    어디서, 왜 발생했는지 명확한 메시지를 남겨야 합니다.

✔️ 로그 남기기 필수!

  • printStackTrace() 대신 **로깅 라이브러리(log.error())**를 사용해야 합니다.

✔️ 자원 해제는 finally 또는 try-with-resources로 처리하기!

  • 리소스를 닫지 않으면 메모리 누수 발생 가능!

🎯 다음 학습 계획

✅ 김영한의 자바 중급 – 1 섹션 11 예외 처리2 – 실습 – 마무리 및 다음 학습
다음 포스팅에서 더 깊이 있는 내용을 정리할 예정이니 기대해 주세요! 😊

 

이제 실무에서도 완벽한 예외 처리를 할 수 있겠죠?
궁금한 점 있으면 언제든지 댓글 남겨 주세요! 😊