예외처리

이규은·2021년 10월 13일
0

예외 처리

목록 보기
1/1

예외 처리

예외를 처리하기 위해 try / catch / fimally를 사용할 수 있다.

try {
    // 예외를 처리하길 원하는 실행 코드	
} catch (e) {
    // e예외가 발생할 경우에 실행될 코드
} finally {
    // 예외 발생 여부와 상관없이 무조건 생행될 코드
}

try : 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생한 예외는 catch 에서 처리한다.
catch : try 에서 발생한 예외 코드나 예외 객체를 인수로 전달 받아 그 처리를 담당한다.
finally : try 에서 예외가 발생하건 안하건 맨 마지막에 무조건 실행된다.

throw throws

throw

thow는 Exception을 발생시킬 때 사용하는 키워드이다. 만약 어떤 연산을 하다가 예상치 못한 일이 발생했을 때 Exception을 발생시켜 예외가 처리될수 있도록 한다.
`

class FoolException extends RuntimeException {
}

public class ExceptionStudy {
    public void sayNick(String nick) {
        if ("fool".equals(nick)) {
            throw new FoolException();
        }
        System.out.println("당신의 별명은 " + nick + " 입니다.");
    }

    public static void main(String[] args) {
        ExceptionStudy exceptionStudy = new ExceptionStudy();
        exceptionStudy.sayNick("fool");
        exceptionStudy.sayNick("genious");
    }

}

위 프로그램을 실행하면 fool으로 sayNick 메소드를 실행하면 다음과 같이 예외가 발생한다

class FoolException extends Exception {
}

public class ExceptionStudy {
    public void sayNick(String nick) {
        try {
            if ("fool".equals(nick)) {
                throw new FoolException();
            }
            System.out.println("당신의 별명은 " + nick + " 입니다.");
        } catch (FoolException e) {
            System.err.println("FoolException이 발생했습니다.");
        }

        System.out.println("당신의 별명은 " + nick + " 입니다.");
    }

    public static void main(String[] args) {
        ExceptionStudy exceptionStudy = new ExceptionStudy();
        exceptionStudy.sayNick("fool");
        exceptionStudy.sayNick("genious");
    }

}

try catch문으로 FoolException을 처리했다.

throws

throws는 메소드를 정의할 때 하용하며 이 메소드에서 발생할 수 있는 Exception을 명시적으로 정의할 때 사용한다. 따라서 throws를 보면 잠재적으로 어떤 Exception을 발생될 수 있는지 쉽게 알 수 있다.

class FoolException extends Exception {
}

public class ExceptionStudy {
    public void sayNick(String nick) throws FoolException {
        if ("fool".equals(nick)) {
            throw new FoolException();
        }
        System.out.println("당신의 별명은 " + nick + " 입니다.");
    }

    public static void main(String[] args) {
        ExceptionStudy exceptionStudy = new ExceptionStudy();
        try {
            exceptionStudy.sayNick("fool");
            exceptionStudy.sayNick("genious");
        }catch(FoolException e) {
            System.err.println("FoolException이 발생했습니다.");
        }
    }
}

throws를 이용해서 FoolException을 위로 보낼 수 있다.
main 메소드에서 try catch로 sayNick 메소드에 대한 FoolException 예외를 처리했다.

자바 예외 계층 구조

Exception과 Error의 차이

Error는 시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킨다. 이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없습니다.

Exception은 오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료 시키지만 발생할 수 있는 상황을 미리 예측하여 처리할 수 있다.

RuntimeException

runtimeException은 try catch로 잡지 않아도 컴파일은 가능하지만 실행할때 에러가 발생한다.
Exception은 반드시 try catch로 잡아야 한다 try catch로 잡지 않으면 컴파일시 에러가 발생한다.

Exception - Checked Exception RuntimeException - Unchecked Exception
처리 여부 반드시 예외 처리 해야 한다. 예외 처리를 하지 않아도 된다.
트랜젝션 롤백 롤백 되지 않음 롤백 진행
예외 처리 확인 컴파일 중 런타임중
발생 외부 영향으로 발생 할 수 있는 것들
(사용자 동작, 운영체제 등)
프로그래머 실수에 의해서 발생

커스텀 예외

Unchecked Exception을 만들고 싶을 때는 RuntimeException을 상속받는다
Checked Exception을 만들고 싶을 때는 Exception을 상속받는다

class AException extends Exception {

}
class BException extends RuntimeException {
    
}
profile
안녕하세요

0개의 댓글