본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 예외 클래스

by a.k.a DUKI 2020. 12. 2.
728x90
반응형

에러(error) -> 컴퓨터 하드웨어 (하드,램,cpu등등) 관련 고장으로 응용 프로그램 실행 오류가 발생 하는 것

예외(exception) -> 그 외 프로그램 자체에서 발생 하는 오류

 

예외(exception)

  • 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
  • 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지될 수 있음
  • 예외 발생 가능성이 높은 코드를 컴파일할 때 컴파일러는 예외 처리 유무를 확인한다.

 

예외와 예외 클래스

1. 일반 예외 (exception)

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

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

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

혼공자 유툽 참고

2. 실행 예외 (runtime exception)

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

  • 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사한지 않는다.

  • 클래스 상속관계에서 부모에  java.lang.RuntimeException이 있다면 실행 예외 클래스 이다.

  • 실행 예외는 개발자의 경험에 의해서 예외 처리 코드 작성해야한다.

혼공자 유툽 참고

3. NullPointException

  • 가장 빈번하게 발행하는 실행 예외 이다.

  • 객체 참조가 없는 상태의 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생 한다.

 

4. ArrayIndexOutOfBoundsException

  • 배열에서 인덱스 범위를 초과할 경우 발생한다.

 

5. NumberFormatException

  • 숫자로 변환할 수 없는 문자가 포함되어 있는 경우 발생 한다.

혼공자 유툽 참고

 

 

예시1) NullPointerException

위와 같이 하는 경우 오류가 생기므로, null값을 다른 것을 대체해서 넣으면 오류가 생기지 않는다.

NullPointerException 오류가 난 경우 도트(.) 앞을 확인 하면 된다.

아래와 같이 null 대신 혼공자 라고 기입하니 오류가 없어진 것을 확인 할 수 있다.

 

 

예시2) ArrayIndexOutOfBoundsException

현재 인덱스는 0,1,2 까지 밖에 없는데 3을 주면 아래처럼 오류가 난다.
오류를 업애려면, 배열의 인덱스 값을 맞추면된다.

 

 

 

예시3) ArrayIndexOutOfBoundsException2

public class ArrayIndexOutOfBoundsException {

	public static void main(String[] args) {

		if (args.length == 2) {
			String data1 = args[0];
			String data2 = args[1];

			System.out.println(data1);
			System.out.println(data2);
		} else {
			System.out.println("두 개의 실행 값이 필요하다");
		}
	}
}

 

이클립스에서 Run-RunConfigurations 메뉴를 선택한후, Arguments 탭의 Program arguments 입력란에 아래처럼 두개의 매개값을 입력하고 실행하면 예외가 발생하지 않는다.

예외 처리 코드는 아니지만, 예외를 발생하지 않게 하는 코드이다.

 

 

예시4) NumberFormatException

public class NumberFormatExceptionEx {

	public static void main(String[] args) {
		
		String data1 = "100";
		String data2 = "a100";
		
		int value1 = Integer.parseInt(data1);
		System.out.println(value1);
		
		//a는 숫자로 변환 할수 없어서 (NumberFormatException.java:68)오류가 발생된다.
		int value2 = Integer.parseInt(data2);
		System.out.println(value2);
	}
}

 

 

 

 

6. ClassCastException

  • 상위 및 하위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생한다.

  • 위 관계가 아닌 경우  클래스는 다른 타입으로 변환할 수 없기 떄문에 ClassCastException이 발생한다.

혼공자 유툽 참고

예시5) ClassCastException

Dog객체를 매개값으로 주어서 Cat 타입으로 변환 할 수 없기때문에 오류가 발생.

public class ClassCastExceptionEx {

	public static void main(String[] args) {
		
		Dog dog = new Dog();
		
		Animal animal = dog;
		Dog dog2 = (Dog) animal;
		
		Cat cat = new Cat();
		Animal animal2 = dog;
		Cat cat2 = (Cat) animal2;
	}

}

class Animal{ }
class Dog extends Animal{ }
class Cat extends Animal{ }

 

 

 

 

 

 

※용어 정리

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

  • 예외 클래스: 자바에서는 예외를 클래스로 관리하며, JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성하여 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해준다. 모든 예외 클래스는 java.lang.Exception 클래스의 상속을 받는다.

  • 일반 예외: 컴파일러 체크 예외라고도 하며, 프로그램 실행 시 예외가 발생할 가능성이 높기때문에 자바 소스를 컴파일 하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. 예외 처리 코드가 없다면 컴파일 에러가 발생한다. 

  • 실행 예외: 컴파일러 넌 체크 예외라고도 하며, 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형

댓글