Java & Spring/Java

예외 개념과 자바 예외 구조

승주우에요 2026. 1. 7. 20:57

1. 예외(Exception)란 무엇인가

예외란 프로그램 실행 중 발생하는, 정상적인 흐름을 방해하는 상황이다

  • 예외는 컴파일 오류가 아니다
  • 예외는 런타임 중 발생
  • 예외는 예측 가능하며, 통제 대상이다
int result = 10;

컴파일은 정상, 실행 시 오류 발생, 프로그램이 즉시 종료되므로 예외처리가 없으면 프로그램은 복구 기회 없이 종료된다.

 

2. 예외 처리가 필요한 이유

  • 프로그램 강제 종류 방지 : 일부 기능 실패가 전체 시스템 실패는 아니기에 흐름을 제어 가능
  • 오류 원인 명확화 : 단순 조건보다 의미가 명확하고, 원인 추적이 가능하다
  • 책임 분리 : 오류 발생과 오류 처리를 분리해 가독성이 향ㅅㅇ됨

예외는 실패가 아닌 의도를 가진 신호라고 볼 수 있다

 

3. 자바의 예외 계층 구조

Java

Errors

  • JVM 레벨의 치명적인 문제
  • 개발자가 처리하지 않음
  • ex) OutOfMemoryError
  • StackOverflowError

Exceptions

  • 애플리캐이션에서 처리 가능한 문제
  • 우리가 다루는 예외의 대부분

4. Check Exception

컴파일 타임에 처리여부를 강제하는 예외이다. try-catch 또는 throws가 필수이다.

FileInputStream fis = new FileInputStream("test.txt");

대표적인 Checked 예외

  • IOException
  • SQLException
  • FileNotFoundException

외부 자원(IO, DB, 네트워크)과 관련되어 있고, 개발자가 사전에 예측 가능한 실패들이다!!

 

장점

  • 안정성 증가
  • 예외 처리 누락 방지

단점

  • 코드 복잡도 증가
  • 불필요한 예외 전파 발생 가능

 

5. Unchecked Exception

런타임에 발생하는 에러이고 컴파일러가 처리 강제하지 않는다.

int value = list.get(10); // IndexOutOfBoundsException

 

대표적인 Uncheck

  • NullPointerException
  • IllegalArgumentException
  • IndexOutOfBoundsException
  • ArithmeticException

6. Checked vs Unchecked

구분 Checked Exception Unchecked Exception
발생 시점 컴파일 타임 런타임
처리 강제  X
상속  Exception RuntimeException
용도  외부 환경 문제 로직 오류
대표 예시 IOException NullPointerException

 

7. 정리

  • 예외는 오류가 아니라 제어 가능한 흐름
  • 모든 예외를 잡는 것이 정답은 아니다
  • 예외 종류 구분이 설계의 출발점

 

'Java & Spring > Java' 카테고리의 다른 글

예외 처리 문법  (0) 2026.01.07
Enum의 개념과 사용  (0) 2026.01.07
내부 클래스(Inner Class)  (0) 2026.01.07
추상화  (0) 2026.01.07
SOLID 원칙  (0) 2026.01.06