Java

[Java] Exception(예외)

parangofsky 2026. 2. 5. 23:53

오늘은 자바에서 예외처리에 대해서 정리해보겠습니다.

 

1. Exception(예외)이란?

 

프로그램 실행 중에 정상 흐름을 방해하는 문제 상황을 객체로 표현한 것이 예외입니다.

  • 예외가 발생하면 JVM은 예외 객체를 던지고(throw),
  • 현재 실행 흐름을 따라가며 잡을 수 있는 곳(catch)을 찾는 과정을 진행합니다.
  • 아무도 못 잡으면 프로그램(해당 스레드)은 종료되고, 보통 스택 트레이스가 출력됩니다.

예외는 크게 3가지 계열로 많이 말합니다.

  • Error: JVM/시스템 레벨(OutOfMemoryError 등) → 보통 애플리케이션에서 복구 대상 아님
  • Exception: 애플리케이션이 다루는 예외
    • 그 중 RuntimeException 계열은 Unchecked
    • 나머지는 Checked

예외처리를 하는 3가지 방법

1. try-catch로 즉시 처리

예외가 발생할 수 있는 코드 주변에서 잡아서 복구/대체/로깅/사용자 메시지 처리 등을 합니다.

  • 장점: 예외 발생 지점과 처리 지점이 가까워 이해 쉬움
  • 단점: 너무 남발하면 코드가 지저분해짐
 

2. throws로 호출자에게 위임

현재 메서드에서 처리하지 않고 메서드를 호출한 쪽으로 넘기는 것을 말합니다.

  • 장점: 하위 계층(DAO 등)에서 억지로 처리하지 않고 상위 계층에서 정책적으로 처리 가능
  • 단점: 무책임하게 계속 던지기만 하면 결국 최상단에서 터짐
public void readFile() throws IOException { 
// ... 
}

3. finally / try-with-resources로 자원 정리

예외가 나든 말든 반드시 해야 하는 작업(파일/소켓/락 해제 등)을 보장합니다.

  • finally: 항상 실행(단, JVM 강제 종료 등 특수 상황 제외)
  • try-with-resources: AutoCloseable 자원을 자동으로 닫아줌
try (BufferedReader br = new BufferedReader(new FileReader(path))) { 
return br.readLine(); 
}

'Java' 카테고리의 다른 글

[Java] equals() 와 hashCode()  (0) 2026.02.04
[Java] Stream  (0) 2026.02.03
[Java] GC  (0) 2026.01.30
[Java] Synchronized에 대해 - 2  (0) 2026.01.26
[Java] Synchronized에 대해  (0) 2026.01.23