예외(Exception) 란 프로그램 실행 중 발생하는 이벤트로, 프로그램 명령의 정상적인 흐름을 방해하는 상황을 말한다.
다만 예외는 예외 처리를 통해 수습(대응)할 수 있다.
에러(Error) 는 예외와 달리, 보통 시스템 레벨의 치명적인 문제로 애플리케이션 코드에서 수습하기 어렵거나 불가능한 오류를 의미한다.
(예: JVM/메모리/하드웨어 문제 등)
예외 처리는 실행 중 발생할 수 있는 예외에 미리 대비해서,
프로그램이 비정상 종료되지 않도록 하고 가능한 한 정상 상태를 유지하도록 코드를 작성하는 것이다.
try 블록: 예외가 발생할 수 있는 코드를 작성catch 블록: 예외가 발생했을 때 처리할 코드를 작성try와 catch는 세트로 존재해야 한다.
만약 try 안에서 예외가 발생하면, 예외가 발생한 지점 이후의 try 내부 코드는 실행되지 않고 곧바로 해당 예외를 처리할 수 있는 catch로 이동한다.
코드를 입력하세요
finally는 catch 뒤에 올 수 있으며 필수는 아니다.
하지만 finally 블록은 예외 발생 여부와 상관없이 무조건 실행된다.
자원 해제(파일 닫기, DB 커넥션 반환 등)에 자주 사용된다.
코드를 입력하세요
throw는 예외를 일부러 발생시키는 키워드다.
조건을 검사해서 특정 상황에서 의도적으로 예외를 발생시킬 때 사용한다.
코드를 입력하세요
throws는 메서드 내부에서 예외를 처리하지 않고,
해당 메서드를 호출한 쪽에서 처리하도록 예외를 위로 던지는 것이다.
코드를 입력하세요
상황에 맞는 예외가 기본 제공되지 않거나, 의미를 명확히 하고 싶을 때 직접 예외 클래스를 정의해서 사용할 수 있다.
예: “1~100 범위만 입력 가능” 같은 규칙을 강제할 때
코드를 입력하세요
예:
NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticExceptionIllegalArgumentExceptionIllegalStateException 등대표 예:
IOExceptionSQLExceptionClassNotFoundException 등네가 작성한 목록 중에 CheckedException 쪽에 RuntimeException들이 섞여 있었다.
ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException,NegativeArraySizeException, IndexOutOfBoundsException,IllegalArgumentException, IllegalStateException그리고,
NoClassDefFoundException 또한 일반적으로 RuntimeException 계열(링크/클래스 로딩 문제) 로 취급되며,NullPointerException: null 참조ArrayIndexOutOfBoundsException: 배열 인덱스 범위 초과ArithmeticException: 0으로 나누기 등 산술 오류IllegalArgumentException: 메서드 인자 값이 부적절IllegalStateException: 객체 상태가 메서드 호출에 부적절IOException: 파일/네트워크 입출력 오류SQLException: DB 처리 오류ClassNotFoundException: 런타임에 클래스를 못 찾음(주로 리플렉션/드라이버 로딩 등)자주 발생하는 예외 중심으로 정리해두면 좋고,
Checked vs Unchecked 기준(컴파일러가 강제하냐) 만 확실히 잡아두면 헷갈릴 일이 확 줄어든다.