The Debugging Chronicles : "코드의 미학"
Mentor JAVA - section14. 예외 처리 본문
에러
시스템에 비정상적인 상황이 생겼을 때 발생
에러의 종류 | 상황 |
outOfMemoryError | 프로그램 싱행 중 메모리 부족 |
IoError | 입출력 에러 |
StackOverFlowError | 가용 메모리 부족 현상, 재귀 호출 문제 시 발생 |
예외
대체로 프로그램 구동 중에 나타나는 오류들
문법적으로는 문제없어 보이지만 실제 운영 중에 생기는 문제들
구분 | 체크 예외 | 비체크 예외 |
처리 여부 | 문법적으로 예외 처리를 강제함 반드시 처리 해야함 |
문법적으로 강제하지 않음 개발자의 판단에 의해 처리 |
확인 시점 | 컴파일 단계 | 실행 단계 |
예외 클래스 | Runtime Exception 을 제외한 모든 예외 IoException SQLException |
Runtime Exception의 자식 클래스 모두 포함 NullPointerException IndexOutOfBoundException ClassNotFoundException등 |
예외 클래스
자바는 프로그램에서 발생하는 예외들을 클래스의 형테로 제공한다.
(프로그램 구동할 때 예외가 발생할 시 시스템은 무슨 이유로 예외가 발생했는지 출력해준다.)
- NullPointerException
· 객체가 제대로 생성되지 않은 상태에서 사용할 경우 발생한다.
· 객체가 정의되었는데 실제 메모리에 생성되지 않았을 경우에 발생된다.
· 가장 빈번하게 발생하는 실행 예외이다.
- NumberFormatException
· 잘못된 문자열을 숫자로 형 변환할 때 발생한다.
- ArrayIndexOutOfBoundsException
· 배열에서 인덱스(index) 범위를 초과해 사용할 때 발생한다.
예외 처리 과정
1. 코드 진행 중 예외가 발생하면 JVM에게 알린다.
2. JVM은 발생한 예외를 분석하여 알맞은 예외 클래스를 생성한다.
3. 생성된 예외 객체를 발생한 지점으로 보낸다.
4. 예외가 발생한 지점에서 처리하지 않으면 프로그램은 비정상 종료된다.
· 예외가 발생할 가능성이 있는 코드를 try{ } 안에 작성하고 catch 메서드는 시스템으로부터 넘어오는 예외 클래스를 받아와서 처리하는
구조이다.
· 예외가 발생했을 때 catch를 통해 제어 및 처리할 수 있다.
· 예외를 처리할 때 Exception 클래스(최상위 클래스)를 이용하면 모든 예외를 처리할 수 있다.
try {
// 예외가 발생할 가능성이 있는 코드
}
catch(예외 클래스명 e) {
// 예외시 작동되는 코드
}
다중 Catch 사용하기
- finally
· 예외 발생 유무와 상관없이 반드시 실행되는 구문이다.
· 예외와 상관없이 정상 종료되어야 할 구문들에서 사용한다.
· 생략 가능하다.
try {
// 예외가 발생할 가능성이 있는 코드
}
catch(예외 클래스명 e) {
// 예외시 작동되는 코드
}
finally {
// 반드시 실행되어야 하는 코드
}
예외 던지기
메서드 내부에서 예외를 처리하지 않고 미룬 후, 해당 메서드를 호출한 쪽에서 예외를 처리하도록 하는 방법을 말한다.
- throws 키워드
· throws 키워드를 사용하여 던지기 할 예외 객체 앞에 붙여준다.
· 예외 객체는 여러 개를 던질 수 있으며, 열 개를 던질 시에 콤마(,)로 구분해서 나열해 준다.
· 메서드에서 예외를 각각 처리하면 메서드 자체의 코드가 길어지거나, 유지 보수 츠견에서 효율이 떨어지기 때문에 메서드를 호출하는
쪽에서 예외를 처리하여 더 수월하게 처리 할 수 있도록 한다.
· 예외 클래스를 여러개 던질 수 있으며, 그 경우 다중 catch문을 사용해 처리해야 한다.
public 반환타입 메소드명(인자1, 인자2, ...) throws 예외클래스 {
// 코드
}
임의의 예외 처리 방법
· 프로그램의 규칙에 위배되어 발생하는 예외도 있다.
정의
|
예외 발생 상황이 아니더라도, 필요에 의해 간제로 예외를 발생시키는 기능
|
발생 방법
|
throw new 예외 객체(메시지);
|
발생 위치
|
try-catch 내부 또는 메서드에 예외 던지기가 있는 경우
|
용도
|
개발자가 예외를 의도하는 위치
|
사용자 정의 예외 처리
- Java가 제공하는 예외 객체 외에도 개발자의 목적에 의해서 예외 객체를 생성, 사용 할 수 있다.
- Java가 제공하는 예외 객체는 다양하지만 모든 예외를 처리하기는 어렵고, 목적에 따라 공통 기능을 지니는 예외 처리도 필요하기 때문에
개발자가 직접 에외를 생성하여 처리한다.
ex. 예외 던지기를 사용하여 일정 범위 안에 숫자만 받기
Scanner sc = new Scanner(System.in);
int val = 0;
while(true) {
try {
syso("숫자를 입력해주세요(0~50)");
val = sc.nextInt();
if(val == -1) {
break;
}
if(val < 0 || val > 50) {
// 임의의 예외 발생
throw new Exception("숫자의 허용범위가 아닙니다.");
}
}
catch {
sc.nextLine(); // 라인 단위 스트링 쓰기 및 버퍼 지우기 용
syso("에러 메세지 : " + e.getMassage());
}
sc.close;
syso("프로그램 종료");
}
'JAVA > Mentor JAVA' 카테고리의 다른 글
Mentor JAVA - section16. 컬렉션 프레임 워크 (0) | 2024.07.27 |
---|---|
Mentor JAVA - section15. 기본 API 클래스 (0) | 2024.07.27 |
Mentor JAVA - section13. 내부 클래스 (0) | 2024.07.24 |
Mentor JAVA - section12. 추상 클래스와 인터페이스 (0) | 2024.07.24 |
Mentor JAVA - section11. 다형성과 타입 변환 (0) | 2024.07.22 |