Java/혼공자

Chapter 10 예외 처리

yeooniyeoon 2023. 1. 26. 00:47
728x90
SMALL

10-1 예외 클래스

예외는 사용자의 잘못된 조작 또는 잘못된 코딩으로 발생하는 프로그램 오류이다.

예외 발생 시 프로그램이 바로 종료된다는 점은 에러와 비슷하지만

예외는 예외 처리를 통해 프로그램 종료 없이 정상 실행 상태를 유지할 수 있다.

 

 

예외와 예외 클래스

예외에는 일반 예외와 실행 예외 두 가지 종류가 있다.

 

일반 예외

컴파일러 체크 예외라고도 한다. 프로그램 실행 시 예외 발생 가능성이 높기 때문에

컴파일 과정에서 해당 예외 처리 코드가 있는지 검사한다.

없을 경우 컴파일 오류가 발생한다.

 

실행 예외

컴파일러 넌 체크 예외라고도 한다.

프로그램 실행 시 예측할 수 없이 발생하기 때문에 컴파일 시 해당 예외 처리 코드가 있는지 검사하지 않는다.

 

일반 예외와 실행 예외를 구분하는 기준은

RuntimeException 클래스의 하위 클래스일 경우 실행 예외 클래스, 아닐 경우 일반 예외 클래스이다.

 

 

자바는 예외를 클래스로 관리하기 때문에

JVM은 프로그램 실행 도중 예외 발생 시 해당 예외 클래스를 객체로 생성한 뒤

해당 예외 처리 코드에서 예외 객체를 이용할 수 있게 한다.

 

모든 예외 클래스는 java.lang.Exception 클래스를 상속받는다! ! ! 

 

 

실행 예외

실행 예외는 컴파일러가 체크하지 않기 때문에 개발자의 경험에 의해 예외 처리 코드를 작성해야 한다.

만약 예외 처리 코드가 없는 경우, 해당 예외 발생 시 프로그램은 즉시 종료된다.

 

NullPointerException

null 값을 갖는 참조변수로 객체 접근 연산자 도트(.) 사용 시 발생하는 예외이다.

객체가 없는 상태에서 객체를 참조하려 했기 때문에 발생하는 것이다.

String data = null;
System.out.println(data.toString());

위 코드에서 data 변수는 참조하는 객체가 없는 상태인데

도트 연산자를 사용해 toString 메소드를 사용했기 때문에 NullPointerException 예외가 발생한다.

 

 

ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과할 경우 발생하는 예외이다.

이 예외를 방지하기 위해 배열값을 읽기 전에 배열 길이를 먼저 조사하여

실행 매개값이 없거나 부족한 경우 사용자에게 알려주는 방식으로 코드를 작성하는 것이 좋다.

int[] arr = new int[2];
System.out.println(arr[3]);	// 존재하지 않는 인덱스를 사용해 예외 발생

if(arr.length == 3) { // 이와 같이 작성하는 것이 좋음)
	System.out.println(arr[3]);
}

 

 

NumberFormatException

문자열을 숫자로 변경하는 경우 발생하는 예외이다.

포장 클래스의 정적 메소드인 parseXXX() 메소드 사용 시 숫자로 변환할 수 없는 문자가 포함된 경우에 발생한다.

String data = "i40";
int i = Integer.parseInt(data);	// 숫자로 변환할 수 없는 문자 i가 포함

위 같은 경우 i는 숫자로 변환될 수 없기 때문에 java.lang.NumberFormatException이 발생한다,

 

 

ClassCastException

상속 관계나 구현 관계가 아닌 경우엔 클래스는 다른 타입으로 변환이 불가하다.

상속/구현 관계를 제외한 경우 클래스 타입 변환 시 ClassCastException이 발생한다.

 

이 예외를 방지하기 위해선 타입 변환 전에 instanceof 연산자를 사용해 변환이 가능한지 먼저 확인하는 것이 좋다.

instaceof 연산의 결과가 true이면 왼쪽 객체를 오른쪽 타입으로 변환이 가능하다는 의미이다.

Animal animal = new Dog();
if(animal instanceof Dog) {	// animal에 Dog 객체가 대입되는 경우 true)
	Dog dog = (Dog) animal;
}

 

728x90
반응형
SMALL

'Java > 혼공자' 카테고리의 다른 글

Chapter 09 중첩 클래스와 중첩 인터페이스  (2) 2023.01.20
Chapter 08 인터페이스  (1) 2023.01.18
Chapter 07 상속  (0) 2023.01.16
[혼공학습단 9기] 혼공자 2주차  (0) 2023.01.15
Chapter 06 클래스  (0) 2023.01.10