ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Chapter 10.1 예외 클래스
    Java 2023. 5. 10. 11:34

     

     

    예외 클래스의 개요

    자바에서 컴퓨터 하드웨어의 오동작이나 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 우리는 에러(error) 라고 부릅니다.  그리고 에러 이외에 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 자체에서 발생하는 오류를 예외(exception)이라고 부릅니다.

    프로그램에서 예외가 발생한다면 프로그램이 즉시 종료됩니다.  만약 개발자가 예외 처리를 하지 않고 하나의 서비스를 제공했다면 계속 프로그램이 종료되어 사용자가 사용할 수 없는 서비스가 되겠죠?  따라서 예외 처리는 프로그램이 종료되지 않고 정상적으로 실행시키기 위해 필수 요소입니다.

     

    예외와 예외 클래스

    • Checked Exception은 프로그램 실행 시 예외가 발생할 가능성이 높아 자바 소스를 컴파일하는 과정에서 예외 처리해야할 코드를 찾습니다.  만약 예외 처리가 되어있지 않다면 예외 처리 코드를 작성할 것을 요구합니다.
    • Unchecked Exception은 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 검사하지 않습니다.

    자바는 예외를 클래스로 관리합니다.  JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성합니다.  

    모든 예외 클래스는 java.lang.Exception 클래스를 상속받습니다.  Checked Exception과 Unchecked Exception은 RuntimeException 클래스를 기준으로 구별합니다.  RuntimeException이 상속 클래스가 아닐 경우는 Checked Exception이고, RuntimeException이 상속 클래스일 경우 Unchecked Exception이다.

     

    Unchecked Exception

    Unchecked Exception은 자바 컴파일러가 체크하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리를 작성해야 합니다. 우리가 자주 볼만한 Unchecked Exception은 언제 발생하고 어떤 오류 메세지가 출력되는지 알아두면 좋습니다.

     

    1. NullPointerException

    객체 참조가 없는 상태에서 객체를 호출하려고 할때 NullPointerException이 발생합니다.   따라서 null 값을 갖는 참조 변수로 객체 접근 연사자인 도트(.)를 사용했을 때 발생합니다.

    package sec01.exam01;
    
    public class NullPointerExceptionExample {
    	public static void main(String[] args) {
        	String data = null;
            System.out.println(data.toString());  // NullPointerException
        }
    }

     

    2. ArrayIndexOutOfBoundsException

    선언된 인덱스 범위보다 초과된 인덱스 범위를 사용했을 경우에 ArrayIndexOutofBoundsException이 발생합니다.

    package sec01.exam02;
    
    public class ArrayIndexOutOfBoundsExceptionExample {
    	public static void main(String[] args) {
        	int[] arr = new int[3];
            System.out.println(arr[3]);  // ArrayIndexOutOfBoundsException
        }
    }

     

    3. NumberFormatException

    Integer.parseInt(String s)과 Double.parseDouble(String s) 메소드를 사용하면 매개값인 문자열을 숫자로 변환할 수 있다면 숫자를 리턴하고, 숫자로 변환될 수 없는 문자가 포함되어 있다면 java.lang.NumberFormatException이 발생합니다.

    package sec01.exam04;
    
    public class NumberFormatExceptionExample {
    	public static void main(String args) {
        	String data1 = "100";
            String data2 = "a100:;
            
            int value1 = Integer.parseInt(data1);
            int value2 = Integer.paresint(data2);  // NumberFormatException
            
            int result = value1 + value2;
            System.out.println(data1 + "+" + data2 + "=" + result);
        }
    }

     

    4. ClassCastException

    타입 변환(Casting)은 상위 클래스와 하위 클래스, 구현 클래스와 인터페이스 간에 발생할 수 있습니다.  하지만 타입을 변환할 수 없는 관계인데 변환하려고 할 때 ClassCastException이 발생합니다.  

    package sec01.exam05;
    
    public class ClassCastExceptionExample {
    	public static void main(String[] args) {
        	Dog dog = new Dog();
            changeDog(dog);
            
            Cat cat = new Cat();
            changeCat(cat);
        }
        
        public static void changeDog(Animal animal) {
        	// if(animal instanceof Dog) {
            	Dog dog = (Dog) animal;
            // }
        }
    }
    
    class Animal {}
    class Dog extends Animal {}
    class Cat extends Animal {}

     

     

    출처 | 혼자 공부하는 자바

Designed by Tistory.