2021. 1. 15.

9주차 과제: 예외 처리

https://github.com/whiteship/live-study/issues/9

목표

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

학습할 것 (필수)

  • 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
  • 자바가 제공하는 예외 계층 구조
  • Exception과 Error의 차이는?
  • RuntimeException과 RE가 아닌 것의 차이는?
  • 커스텀한 예외 만드는 방법


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

public class MyClass {
    public static void main(String[] args) {
        try {
        
            // 예외를 발생시킬 수 있는 코드
            int[] myArray = {1, 2, 3};
            System.out.println(myArray[3]);
            
        } catch (Exception e) {
        
            // 오류 발생 시 실행할 코드
            System.err.println(e.getMessage());
            
        } finally {
        
            // try 블록 종료 시 항상 실행되는 코드
            System.out.println("try catch block end");
        }
    }
}
Index 3 out of bounds for length 3
try catch block end

Process finished with exit code 0
public class MyClass {

    private static void checkAge(int age) 
            throws ArithmeticException {

        if (age < 18) {
            // throw를 사용해 특정 Exception으로 예외를 던진다.
            throw new ArithmeticException("Access denied");
        } else {
            System.out.println("Access granted");
        }
    }
    public static void main(String[] args) {
        checkAge(20);
    }
}
Exception in thread "main"
java.lang.ArithmeticException: Access denied
	at com.company.MyClass.checkAge(MyClass.java:7)
	at com.company.MyClass.main(MyClass.java:13)

출처: https://www.w3schools.com/java/java_try_catch.asp

throw / throws 비교

  • 메소드 안에서 예외를 사용 / 메소드의 블럭에서 예외를 받아 처리
  • 1개의 예외 선언 가능 / 여러개의 예외 선언 가능

https://www.w3schools.com/java/ref_keyword_throws.asp

https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html

https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html

https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html


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

출처: https://www.manishsanger.com/java-exception-hierarchy/

Throwable

  • 예외처리의 최상위 클래스
  • Serializable 인터페이스의 구현
  • throwable에는 생성 당시 스레드의 실행 스택 스냅샷이 포함

https://www.geeksforgeeks.org/throwable-class-in-java-with-examples/

Error

  • 예상치 못한 심각한 문제
  • 처리 기술로 복구할 수 없는 조건 (비정상적인 프로그램 종료의 원인)
  • 런타임에 발생 (ex 메모리 부족, 시스템 충돌 오류)

Exception

  • 포착하려는 조건의 문제
  • 런타임시 발생하는 조건으로 프로그램이 종료 될 수 있지만 try catch, throw 키워드로 복구 가능
  • checked / unchecked 예외 두 가지 범주

https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html


Exception과 Error의 차이는?

출처: https://www.geeksforgeeks.org/errors-v-s-exceptions-in-java/


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

Checked Exception

  • 반드시 예외를 처리해야 함
  • 컴파일 단계에서 확인

Unchecked Exception

  • 예외 처리를 강제하지 않음
  • 실행 단계에서 확인
  • RuntimeException 하위 예외


커스텀한 예외 만드는 방법

class MyException extends Exception {
    public MyException(String errorMessage) {
    	// 부모의 생성자 호출
        super(errorMessage); 
    } 
}

public class Main { 
    public static void main(String args[]) { 
        try
            throw new MyException("메세지"); 
        } 
        catch (MyException ex) { 
            System.out.println("Caught");
            System.out.println(ex.getMessage()); 
        }
    }
}


댓글 없음:

댓글 쓰기