예외처리
자바 프로그램을 실행하다 보면 갑자기 프로그램이 종료되거나, 어떤 원인에 의해 잘못 동작하여 오류 메시지가 나타나는 등 예기치 못한 오류가 발생한다. 전자는 우리가 해결할 수 없는 시스템에 에러가 발생해 프로그램이 종료된 경우이며 후자는 프로그램 사용 중 발생한 오류를 개발자가 처리해 메시지가 출력된 경우이다. 자바는 에러 또는 예외가 발생할 경우, 해당 사항을 클래스로 관리한다. 컴파일 또는 실행 중에 문제가 발생하면 해당 문제에 따른 클래스 객체를 생성한다. 우리는 이 클래스를 이용해 프로그램 동작 중에 발생하는 예외들을 처리할 수 있다.
에러는 시스템에 비정상적인 상황이 생겼을 때 발생한다. 외부 요인일 수 있고, 프로그램 구동 중에 발생하는 오류일 수 있다.
예외란 대체로 프로그램 구동 중에 나타나는 오류들을 말한다. 문법적으로는 문제없어 보이지만 실제 운영 중에 생기는 문제들이다. 예외는 체크 예외와 비체크 예외 두 가지가 있다. 체크 예외는 자바 소스를 컴파일하는 과정에서 검사하며, 보통 문법적으로 강제하여 예외 처리를 해야 하는 경우이고, 비체크 예외는 컴파일 과정에서 검사하지 않으므로 사용자의 경험이나 테스트로 찾아야 하는 경우가 있다.
예외 클래스

최상위의 Throwable을 상속받은 에러와 예외가 있다. 에러는 시스템상의 심각한 수준의 오류이기 때문에 수습될 수 없는 반면에, 예외는 개발자가 로직을 추가해 처리할 수 있다.
NullPointerException은 자바 프로그램에서 가장 빈번하게 발생하는 실행 예외이다. 객체가 제대로 생성되지 않은 상태에서 사용할 경우 발생한다. 우리가 객체를 선언하면 인스턴스는 객체의 주소를 가지게 되고, 그것을 통해 객체에 접근해 값을 가져온다. 그런데 객체는 정의되었는데 실제 메모리에 생성되지 않았을 경우, 예외가 발생한다.
NumberFormatException은 잘못된 문자열을 숫자로 형 변환할 때 발생한다. 숫자 형태('111')의 문자열은 정수 타입으로 변환할 수 있으나 문자가 포함되거나 실수 형태('11.11')의 문자열은 변환할 수 없다.
ArrayIndexOutOfBoundsException은 배열에서 인덱스 범위를 초과해 사용할 때 발생한다.
예외 처리 문법
자바에서 예외가 발생했을 때 시스템이 처리하는 과정은 이렇다
- 코드 진행 중 예외가 발생하면 JVM에게 알린다
- JVM은 발생한 예외를 분석하여 알맞은 예외 클래스를 생성한다.
- 생성된 예외 객체를 발생한 지점으로 보낸다.
- 예외가 발생한 지점에서 처리하지 않으면 프로그램은 비정상 종료된다.
위와 같이 예외가 발생하면 JVM에서 분석하여 예외 클래스 중 알맞은 것을 발생시켜 발생 지점으로 던지게 된다. 이를 처리하지 않으면 프로그램은 비정상으로 종료된다. 그래서 우리는 넘어온 예외를 처리해 프로그램을 비정상으로 종료되지 않고 구동할 수 있도록 해야 한다.
예외를 처리하는 가장 기본 문법은 try-catch 문이다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch(예외 클래스명 e) {
// 예외 처리 코드
}
발생한 예외를 처리하기 위해서 try-catch 구문을 사용한다. 예외가 발생할 가능성이 있는 코드는 try{...} 안에 작성하고 catch 메서드는 시스템으로부터 넘어오는 예외 클래스를 받아서 처리한다.
finally 블록은 예외 발생 유무와 상관없이 실행되는 구문이며 생략 가능하다. 예외 처리를 할 때, 예외와 상관없이 바늗시 처리해야 하는 구문들을 작성할 때 사용되며, 보통 외부 연동이나 예외가 발생해도 정상 종료되어야 할 구문들에서 사용한다.
예외 던지기
try-catch 문으로 예외를 처리할 수 있다. 하지만 메서드 내부에서 처리하지 않고 미룬 후, 해당 메서드를 호출한 쪽에서 예외를 처리하도록 하는 방법도 있다. 이를 예외 던지기 혹은 예외의 전가라고 한다. throws 키워드를 사용하는데 메서드 뒤에 throws 키워드를 사용하여 던지기 할 예외 객체를 붙여주면 된다. 예외 객체는 여러 개를 던질 수 있으며, 여러 개를 던질 시에는 콤마(,)로 구분해서 나열한다.
사용자 정의 예외 처리
자바가 제공하는 예외 객체 외에도 개발자의 목적에 의해서 예외 객체를 만들 수 있고, 이를 사용할 수 있다. 자바가 제공하는 예외 객체는 다양하지만 모든 예외를 처리하기 업렵다. 또한 목적에 다라 공통 기능을 지니는 예외 처리도 필요하기 때문에 개발자가 직접 예외를 생성해 처리가 가능하다.
'BOOK' 카테고리의 다른 글
| [JAVA] MENTOR JAVA SECTION 16 (2) | 2025.01.23 |
|---|---|
| [JAVA] MENTOR JAVA SECTION 15 (1) | 2025.01.22 |
| [JAVA] MENTOR JAVA SECTION 13 (2) | 2025.01.20 |
| [JAVA] MENTOR JAVA SECTION 12 (2) | 2025.01.19 |
| [JAVA] MENTOR JAVA SECTION 11 (2) | 2025.01.18 |