2025-09-03 예외처리

Ckd gus·2026년 2월 2일

예외(Exception) 정리

예외(Exception)

예외(Exception) 란 프로그램 실행 중 발생하는 이벤트로, 프로그램 명령의 정상적인 흐름을 방해하는 상황을 말한다.
다만 예외는 예외 처리를 통해 수습(대응)할 수 있다.


에러(Error)

에러(Error) 는 예외와 달리, 보통 시스템 레벨의 치명적인 문제로 애플리케이션 코드에서 수습하기 어렵거나 불가능한 오류를 의미한다.
(예: JVM/메모리/하드웨어 문제 등)


예외 처리(Exception Handling)

예외 처리는 실행 중 발생할 수 있는 예외에 미리 대비해서,
프로그램이 비정상 종료되지 않도록 하고 가능한 한 정상 상태를 유지하도록 코드를 작성하는 것이다.


try-catch

  • try 블록: 예외가 발생할 수 있는 코드를 작성
  • catch 블록: 예외가 발생했을 때 처리할 코드를 작성

trycatch세트로 존재해야 한다.
만약 try 안에서 예외가 발생하면, 예외가 발생한 지점 이후의 try 내부 코드는 실행되지 않고 곧바로 해당 예외를 처리할 수 있는 catch로 이동한다.

코드를 입력하세요

finally

finallycatch 뒤에 올 수 있으며 필수는 아니다.
하지만 finally 블록은 예외 발생 여부와 상관없이 무조건 실행된다.
자원 해제(파일 닫기, DB 커넥션 반환 등)에 자주 사용된다.

코드를 입력하세요

throw

throw예외를 일부러 발생시키는 키워드다.
조건을 검사해서 특정 상황에서 의도적으로 예외를 발생시킬 때 사용한다.

코드를 입력하세요

throws

throws는 메서드 내부에서 예외를 처리하지 않고,
해당 메서드를 호출한 쪽에서 처리하도록 예외를 위로 던지는 것이다.

코드를 입력하세요

사용자 정의 예외(Custom Exception)

상황에 맞는 예외가 기본 제공되지 않거나, 의미를 명확히 하고 싶을 때 직접 예외 클래스를 정의해서 사용할 수 있다.

예: “1~100 범위만 입력 가능” 같은 규칙을 강제할 때

코드를 입력하세요

예외 분류: RuntimeException vs CheckedException

RuntimeException (Unchecked Exception)

  • 컴파일러가 예외 처리를 강제하지 않는다
  • 보통 프로그래머 실수(버그) 로 발생하는 경우가 많다

예:

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • ArithmeticException
  • IllegalArgumentException
  • IllegalStateException

CheckedException

  • 컴파일러가 예외 처리를 강제한다 (try-catch 또는 throws 필요)
  • 주로 외부 환경(파일/네트워크/DB 등) 에 의해 발생할 수 있는 예외가 해당된다

대표 예:

  • IOException
  • SQLException
  • ClassNotFoundException

(중요) 기존 내용 오류 수정

네가 작성한 목록 중에 CheckedException 쪽에 RuntimeException들이 섞여 있었다.

  • ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException,
    NegativeArraySizeException, IndexOutOfBoundsException,
    IllegalArgumentException, IllegalStateException
    → 전부 RuntimeException(Unchecked) 계열이다.

그리고,

  • NoClassDefFoundException 또한 일반적으로 RuntimeException 계열(링크/클래스 로딩 문제) 로 취급되며,
    컴파일러가 try-catch를 강제하는 CheckedException 목록에 넣는 건 부정확하다.

자주 보는 예외 요약(정리)

Unchecked(RuntimeException 계열)

  • NullPointerException: null 참조
  • ArrayIndexOutOfBoundsException: 배열 인덱스 범위 초과
  • ArithmeticException: 0으로 나누기 등 산술 오류
  • IllegalArgumentException: 메서드 인자 값이 부적절
  • IllegalStateException: 객체 상태가 메서드 호출에 부적절

Checked(Exception 계열)

  • IOException: 파일/네트워크 입출력 오류
  • SQLException: DB 처리 오류
  • ClassNotFoundException: 런타임에 클래스를 못 찾음(주로 리플렉션/드라이버 로딩 등)

자주 발생하는 예외 중심으로 정리해두면 좋고,
Checked vs Unchecked 기준(컴파일러가 강제하냐) 만 확실히 잡아두면 헷갈릴 일이 확 줄어든다.

profile
백엔드 공부중입니다.

0개의 댓글