자바 스터디

9주차 과제: 예외 처리

삶은겨란 2022. 6. 8. 18:23

목표

자바의 예외 처리에 대해 학습하세요.

목차

1. 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)

2. 자바가 제공하는 예외 계층 구조

3. Exception과 Error의 차이는?

4. RuntimeException과 RE가 아닌 것의 차이는?

5. 커스텀한 예외 만드는 방법


1. 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)

예외란  동작이나 결과에 영향을 줄 수 있는 실행 중에 발생한 오류를 말한다.

예외는 개발자가 예측하여 핸들링할 수 있다.

 

(1) 예외가 발생하는 경우

  • 정수를 0으로 나눌 때
  • 배열의 크기보다 큰 인덱스 접근
  • 존재하지 않는 파일 접근
  • 데이터타입에 맞지 않는 입력

 

(2) try-catch-finally

try{
    예외 발생 가능성이 있는 실행문
}
catch (처리할 예외 타입 선언) {
	예외 처리문
}
finally{ // 생략가능
	무조건 실행되는 문장
}

 

다중 catch도 가능하다.

try{
	System.out.println(a/b);
}catch(ArithmeticException e){
	System.out.println("ArithmeticException");
}catch(Exception e){
	System.out.println("Exception");
}

 

(3) throw

의도적으로 예외를 만든다.

public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 1) throw new RuntimeException("홀수입니다.");
        }
    }

 

 

 

(4) throws

예외를 처리하지 않고 호출한 메소드로 넘긴다.

import java.io.*;
class B{
    void run() throws IOException, FileNotFoundException{
        BufferedReader bReader = null;
        String input = null;
        bReader = new BufferedReader(new FileReader("out.txt"));
        input = bReader.readLine();
        System.out.println(input);
    }
}
class C{
    void run(){
        B b = new B();
        try {
            b.run();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         c.run();
    }   
}

 

 

1. 메인에서 c.run()실행

2. 클래스 C의 run()에서 b.run()실행

3. 클래스 B의 run()에서 예외가 발생할 경우 C.run()에서 넘긴다.

 

 

2. 자바가 제공하는 예외 계층 구조

예외 클래스 구조를 보면 최상위 클래스인 Object를 상속받은 Throwable을 예외와 에러가 다시 상속 받고 있다.

 

(1) Throwable 클래스

예외와 오류의 부모 클래스로 예외와 오류에 관한 정보를 확인할 수 있는 메소드를 포함하고 있다.

메소드 설명
String getMessage() 기본적인 정보 출력
void printStackTrace() 예외가 발생한 위치와 호출된 메소드의 정보 출력
String toString() getMessage보다 상세한 정보 출력
try {
    System.out.println(5 / 0);
} catch (ArithmeticException e) {
    System.out.println("현재 발생한 예외 정보 : " + e.getMessage());
}

실행 결과
현재 발생한 예외 정보 : / by zero

 

(2) checked Exception & unchecked Exception

  checked Exception unchecked Exception
처리 여부 예외 처리 필수 예외 처리는 강제하지 않음
확인 시점 컴파일  실행

 

(3) 자주 사용하는 자바의 예외 클래스

예외 클래스(예외 타입) 상황 패키지
ArithmeticException 정수를 0으로 나눌 때 java.lang
NullPointerException null 레퍼런스를 참조할 때 java.lang
ClassCastException 변환할 수 없는 타입으로 객체를 변환할 때 java.lang
OutOfMemoryException 메모리가 부족할 때 java.lang
ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근 java.lang
IllegalArgumentException 잘못된 인자 전달 java.lang
NumberFormatException 문자열이 나타내는 숫자와 일치하지 않는 차입의 숫자로 변환 시 발생 java.lang
IOException 입출력 동작 실패 또는 인터럽트 시 발생 java.io
InputMismatchException 정수 입력에 문자를입력한 경우 java.util

 

 

3. Exception과 Error의 차이는?

예외는 제어 가능한 실행시간 오류를 말한다.

에러는 가상머신에 문제가 발생하는 예외를 말한다. 개발자가 핸들링 할 수 없으며 에러가 발생하면 애플리케이션이 중단되도록 둔다.

 

 

4. RuntimeException과 RE가 아닌 것의 차이는?

RuntimeException은 unchecked exception으로 예외 처리가 강제가 아니고, RE가 아닌 예외들은 checked exception으로 예외처리를 해주어야 한다.

 

 

 

5. 커스텀한 예외 만드는 방법

checked exception 사용자 정의 예외 클래스→java.lang.Exception 상속

unchecked exception 사용자 정의 예외 클래스→java.lang.RuntimeException 상속

class myException extends Exception{
	MyException(String errorMsg){
    	super(errorMsg); //부모클래스인 Exception의 생성자 호출
    }
}

 

 


명품 JAVA Programming/황기태,김효수

https://opentutorials.org/course/1223/6227

http://www.tcpschool.com/java/java_exception_class

'자바 스터디' 카테고리의 다른 글

11주차 과제: Enum  (0) 2022.06.11
10주차 과제: 멀티쓰레드 프로그래밍  (0) 2022.06.10
8주자 과제: 인터페이스  (0) 2022.06.04
7주차 과제: 패키지  (0) 2022.06.04
6주차 과제: 상속  (0) 2022.05.30