Week 09

2022. 8. 6. 22:00
728x90

목표

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

학습할 것

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

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

예외 처리라는 것은 예외가 발생할 수도 있는 상황에 대비하여 코드를 작성하는 것이다.
# try-catch(+finally)문

* 예외 처리의 정의&목적

1. 정의: 프로그램 실행시에 발생할 수 있는 예외의 발생에 대비하기 위한 목적
	
2. 목적: 프로그램의 비정상적인 종료를 막고, 정상적인 실행 상태를 유지하는 것

*예외 처리 방법(내가 처리를 하던지 메서드를 호출한 곳으로 떠넘기던지)

1. try-catch문

try{

//예외가 발생할 가능성이 있는 코드들을 작성하고
//try 내에서 발생한 오류와 일치하는 catch문을 찾아 그 안에 있는 코드를 실행함

} catch(Exception1 e) {

...

} catch(Exception2 e2) {

...

} catch(Exception e3) {

2. 예외 처리 방법

1) try-catch문

Exception e = new Exception("고의로 발생시킴")

throw e;

}catch(Exception e){

System.out.println("에러 메세지" + e.getMessage());

e.printStackTrace();

}

2) 예외 선언하기(떠넘기기): throws는 호출한 메서드로 예외를 전달해주는 건데, 이건 호출한 곳에 예외를 떠넘기는 거지 처리하는 게 아님!!
	-> 쉽게 얘기해서 메서드를 호출하면 Exception1, Exception2, ...ExceptionN가 발생할 수도 있다라는 걸 void method() throws를 써서 보여주는 거임

**예외 선언 = throws Exception(){}

ex1)

void method() throws Exception1, Exception2, ...ExceptionN {

					//메서드의 내용

}

ex2)

class Example{

public static void main(String args[]) throws Exception{

			method1();

	}

static void method1() throws Exception{

			method2();

	}

static void method2() throws Exception{ //2번

			throw new Exception(); //1번

	}
}

*1번 -> 2번 순으로 해석하면 될 듯,, 예외가 발생했는데 try-catch문 없이 throws를 이용해서 떠넘기는 거임
어디로? 메서드를 호출한 곳으로!
*throw new Exception();에 의해 예외 발생함 근데 메서드 안에 try-catch문이 없어서 예외를 떠넘긴다
어디로? 메서드를 호출한 곳으로 ...(method1 구현부에서 예외가 발생한 셈)
근데 method1()구현부에도 try-catch문이 없어서 또 메인 메서드로 떠넘긴다
메인 메서드에도 try-catch문이 없어서 비정상종료..... 그 후에
JVM이 예외를 받는다.. (예외처리기)java.main....하면서 예외가 발생

Exception in thread "main" java.lang.Exception....
at method2 
at method1
at main

이런 식으로 main의 method1의 method2에서 예외가 발생했다...라는?
아무도 처리하지 못했기 때문에 표시를 해주는 거겠지? 싶은

3) 은폐 덮기
ex) 빅데이터를 다루는데 예외가 발생하여도 그냥 무시하고 가야하는 경우 catch문을 비워 두면 은폐 가능

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

RuntimeException과 그외의 Exception이 예외클래스들의 계층 구조를 이룬다.
# 예외 계층 구조

예외클래스는 아래처럼 RuntimeException클래스들과 Exception클래스들 두 그룹으로 나뉜다.

 

3.Exception과 Error의 차이는?

예외와 오류의 차이는 수습 가능의 유무이다.
# Exception & Error

1. Exception: 프로그램 코드로 수습할 수 있는 다소 미약한 오류

2. Error: 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

* Java의 에러

1) 컴파일 에러: 컴파일을 하는 과정에서 생기는 에러이며, 문법적인 오류인 경우가 대부분이다.

2) 런타임 에러: 응용프로그램을 실행하는 과정에서 발생한 에러

3) 논리적 에러: 의도와 다르게 동작하는 것

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

RuntimeException과 그 이외의 Exception
# RuntimeException과 그 이외의 Exception

1. RuntimeException 클래스들: 프로그래머의 실수로 발생하는 예외(예외 처리 선택)

2. Exception 클래스들:사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외(예외 처리 필수)
	->쉽게 생각해서 RuntimeException과 하위의 Exception을 제외한 모든 Exception이 해당함
	->그리고 필수 예외 처리를 해야되는데 예외 처리를 하지 않은 경우에 컴파일시 에러가 생김

*가능하면 선택 가능한 RE로 예외처리,,, 만약 꼭 예외 처리를 해야 하면 Exception...

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

사용자정의 예외
# Custom Exception

class MyException  extends Exception {
    MyException(String msg) {
        super(msg);
    }
}

*기존의 예외 클래스를 상속받아서 새로운 예외 클래스를 정의할 수 있다.

class MyException extends

6.예외 되던지기(개인적인 작성)

사용할 일이 있을까? 예외를 분담해서 처리하는 경우는 분명 있긴 할 것이다. 잘 쓰진 않겠지만
# re-throwing?

public class ReThrowing {
    public static void main(String[] args) {

        try {
            method1();

        } catch (Exception e) {
            System.out.println("main메서드에서 예외처리가 되었습니다.");
        }
    }

    static void method1() throws Exception {
        try {
            throw new Exception();

        } catch (Exception e) {
            System.out.println("method1에서 예외가 처리되었습니다.");
            throw e;
        }
    }

}

 

'Java & Spring > WhiteShip Study' 카테고리의 다른 글

Week 11  (0) 2022.08.20
Week 10  (0) 2022.08.13
Week 08  (0) 2022.07.30
Week 07  (0) 2022.07.23
Week 06  (0) 2022.07.16

BELATED ARTICLES

more