본문 바로가기
language/java

Java Exception 구조 완벽 이해하기

by 죄니안죄니 2026. 5. 28.
반응형

Java Exception 구조 완벽 이해하기

Java 개발에서 가장 중요한 개념 중 하나가 바로:

Exception(예외)

입니다.

실무에서는:

  • DB 오류
  • 네트워크 오류
  • 파일 오류
  • null 문제
  • 비즈니스 오류

전부 예외 처리와 연결됩니다.

하지만 많은 초보 개발자는:

try-catch만 쓰면 되는 거 아냐?
 

정도로 이해하는 경우가 많습니다.

실제로 Java 예외 시스템은:

  • Throwable 계층 구조
  • Checked Exception
  • Unchecked Exception
  • JVM Stack Unwinding
  • Error vs Exception

까지 연결되는 매우 중요한 Java 핵심 구조입니다.

이번 글에서는:

  • Exception 구조
  • Throwable 계층
  • Error vs Exception
  • Checked / Unchecked
  • RuntimeException
  • Stack Trace
  • JVM 예외 처리 흐름

까지 깊게 정리해보겠습니다.


1. Exception이란?

Exception 은:

프로그램 실행 중 발생하는 비정상 상황

입니다.


2. 예외 예시

대표적으로:

  • 파일 없음
  • DB 연결 실패
  • 배열 범위 초과
  • null 접근
  • 네트워크 장애

등.


3. Java 예외 구조 핵심

매우 중요합니다.

Java 모든 예외의 최상위 부모는:

 
Throwable
 

입니다.


4. 전체 구조

Throwable
 ├── Error
 └── Exception
      └── RuntimeException
 

5. Throwable이란?

Throwable 은:

JVM이 던질 수 있는 모든 문제의 최상위 클래스

입니다.


6. Throwable 하위 두 종류

종류의미
Error 시스템 레벨 심각 오류
Exception 애플리케이션 처리 가능 오류

7. Error란?

매우 중요합니다.


8. 대표 Error

  • OutOfMemoryError
  • StackOverflowError
  • VirtualMachineError

9. 특징

애플리케이션이 복구하기 어려움
 

입니다.

즉 보통:

잡으려고 하지 않음
 

10. OutOfMemoryError 예시

Heap 메모리 부족
 

상황.


11. 왜 catch 잘 안 할까?

이미 JVM 상태가:

불안정
 

할 가능성 큼.

즉:

정상 복구 어려움
 

12. Exception이란?

반대로:

애플리케이션 레벨 문제
 

입니다.


13. 대표 Exception

  • IOException
  • SQLException
  • NullPointerException
  • IllegalArgumentException

14. Exception 내부 구조

여기서 또 나뉨.

Exception
 ├── Checked Exception
 └── RuntimeException
 

15. Checked Exception

매우 중요합니다.


16. 특징

컴파일러가 처리 강제
 

합니다.

즉:

  • try-catch
  • throws

반드시 필요.


17. 대표 Checked Exception

예외의미
IOException 파일/네트워크 IO 문제
SQLException DB 문제
FileNotFoundException 파일 없음

18. 예시

 
FileReader reader =
    new FileReader("a.txt");
 

컴파일 오류 가능.


19. 왜 강제할까?

목표:

복구 가능한 예외 처리 강제
 

입니다.


20. RuntimeException

매우 중요합니다.


21. 특징

컴파일러가 강제 안 함
 

입니다.

즉:

try-catch 없어도 컴파일 가능
 

22. 대표 RuntimeException

예외의미
NullPointerException null 접근
IllegalArgumentException 잘못된 인자
IndexOutOfBoundsException 범위 초과
ArithmeticException 0 나누기

23. 왜 unchecked일까?

대부분:

개발자 실수
 

에 가까운 경우 많기 때문.


24. NullPointerException 예시

 
String s = null;

s.length();
 

NPE 발생
 

25. Checked vs Unchecked 핵심 차이

항목CheckedUnchecked
컴파일 검사 O X
처리 강제 O X
대표 원인 외부 환경 프로그래밍 오류

26. JVM 예외 처리 흐름

매우 중요합니다.


27. 예외 발생 시

예:

 
throw new RuntimeException();
 

28. JVM 동작

현재 메서드 종료
↓
호출 스택 따라 위로 전파
 

됩니다.


29. 이것이 Stack Unwinding

Stack unwinding 이란:

예외 발생 시 호출 스택을 되돌아가며 catch 찾는 과정

입니다.


30. 흐름 예시

main()
 ↓
service()
 ↓
repository()
 ↓
예외 발생
 

repository 종료
↓
service로 전달
↓
main까지 전달
 

31. catch 발견 시

거기서 처리
 

됩니다.


32. 없으면?

프로그램 종료 가능
 

(JVM main thread 기준)


33. Stack Trace란?

매우 중요합니다.


34. 예시

at UserService.save(UserService.java:10)
 

35. 의미

예외가 발생한 호출 경로
 

입니다.

즉:

디버깅 핵심 정보
 

36. throw vs throws

많이 헷갈림.


37. throw

 
throw new RuntimeException();
 

실제 예외 발생
 

38. throws

 
void read() throws IOException
 

예외 전파 선언
 

39. finally 블록

매우 중요합니다.


40. 특징

예외 여부와 관계없이 실행
 

됩니다.


41. 대표 사용

  • 파일 close
  • DB connection 반환
  • lock 해제

42. 예시

 
finally {

    connection.close();
}
 

43. try-with-resources 등장 이유

리소스 자동 해제 목적.


44. 예시

 
try (
    BufferedReader br = ...
) {

}
 

자동 close 수행.


45. Exception Chaining

매우 중요합니다.


46. 예시

 
throw new RuntimeException(e);
 

47. 왜 중요할까?

원래 예외 정보 유지 가능.

즉:

근본 원인(cause) 추적
 

가능.


48. Custom Exception

실무에서 매우 중요.


49. 예시

 
class BusinessException
    extends RuntimeException
 

50. 목적

비즈니스 의미 명확화
 

입니다.


51. 왜 RuntimeException 상속 많이 할까?

현대 Spring 실무에서는 보통:

Unchecked Exception 선호
 

경향 강함.


52. 이유

Checked Exception 남용 시:

  • throws 전파 지옥
  • 코드 오염
  • 계층 결합 증가

가능.


53. Spring과 연결

Spring Framework 은 대부분:

RuntimeException 기반
 

처리.

예:

  • DataAccessException
  • Transaction rollback

등.


54. Exception 처리 전략 중요

실무 핵심:

“어디서 잡을 것인가”
 

입니다.


55. 너무 일찍 catch하면 문제

예:

 
catch(Exception e) {}
 

예외 삼킴(swallowing)
 

문제 발생 가능.


56. 실무에서 자주 하는 실수

1) Exception 전체 catch

문제 원인 숨김 가능.


2) printStackTrace만 사용

실무에서는 logging framework 사용 필요.


3) Checked Exception 남용

계층 전파 지옥 가능.


4) RuntimeException 무조건 나쁘다고 생각

현대 Spring은 오히려 많이 사용.


57. 핵심 구조 정리

Throwable
 ├── Error
 └── Exception
      └── RuntimeException
 

58. 핵심 흐름 요약

예외 발생
↓
Stack Unwinding
↓
catch 탐색
↓
처리 or 프로그램 종료
 

59. 가장 중요한 핵심 한 줄

Java Exception 시스템은
“예외 상황을 객체와 계층 구조로 관리하는 메커니즘”
 

입니다.


60. 정리

Java Exception 구조는 단순 try-catch 문법이 아닙니다.

실제로는:

  • Throwable 계층
  • Checked/Unchecked
  • Stack Unwinding
  • RuntimeException 전략
  • JVM 예외 처리 메커니즘

전체와 연결되는 Java 핵심 실행 구조입니다.

특히 실무에서는:

  • Error vs Exception
  • RuntimeException 사용 전략
  • 예외 전파
  • Exception Chaining
  • 비즈니스 예외 설계

를 정확히 이해하는 것이 매우 중요합니다.

다음 글에서는:

Checked vs Unchecked Exception

을 현대 Spring 실무 전략, 트랜잭션 rollback, 계층 설계, RuntimeException 선호 이유까지 포함해서 깊게 정리해보겠습니다.

반응형

댓글