10.21 예외 처리 (try-catch, finally )

JangUT·2024년 10월 21일

오늘은 예외 처리에 대해 알아보겠습니다.

먼저 예외란 회복이 가능한 문제입니다.

요구한 값을 숫자인데 문자를 입력했거나, 존재하지 않는 클래스를 호출하거나 등등

이렇게 회복이 가능한 문제를 해결하는 것이 예외 처리를 하는 이유입니다.

그럼 try-catch, finally 에 대해 좀 더 자세히 알아보겠습니다.

  1. 예외를 어떻게 정의할 것인가 ?

우리는 이런식으로 직접 예외를 정의할 수 있습니다.

class OurBadException extends Exception {
	public OurBadException() {
		super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
	}
}

그럼 예외 상황이 발생했을때 해당 문구가 출력됩니다.

1번째 줄을 보시면 OurBadException 클래스가 Exception 이라는 상위 클래스에 상속된걸 보실수 있습니다.

super는 바로 Exception 속한 메서드의 생성자 입니다.

그리고

class OurClass {
    private final Boolean just = true;
		
		// 신규 문법 throws!
    public void thisMethodIsDangerous() throws OurBadException {
        if (just) {
						// 신규 문법 throw!
            throw new OurBadException();
        }
    }
}

그리고 OurClass라는 클래스를 만들고 메서드를 만들어 메서드가 위험하다고 알려줍니다.

2번째 줄을 보시면 final로 값을 true로 고정해놓습니다.

다음은 thisMethodIsDangerous() 메서드를 정의하고

throws 뒤에 우리가 아까 정의 했던 클래스 명을 입력합니다.

if문은 final로 인해 항상 참으로 유지되고 throw new 뒤에 실제로 예외 객체를 던질 때 사용하는 예약어 입니다.

throw는 일반 메서드의 return 키워드 처럼 throw 아래의 구문들은 실행되지 않고 throw문과 함께 메서드가 종료됩니다.

이번엔 직접 예외를 handing해보겠습니다.

public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
            // "시도" 해보는 코드가 들어가는 블럭입니다.
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. 예외가 발생하면, "잡아서" handling 합니다.
            // 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
						// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
						// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
						// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
            System.out.println(e.getMessage());
        } finally {
            // 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
            // 무조건 실행되는 코드가 들어가는 블럭입니다.
            System.out.println("우리는 방금 예외를 handling 했습니다!");
        }

먼저 Ourclass에 기본 생성자를 만들어주고

ourClass.thisMethodIsDangerous();

이와 같이 메서드를 실행해 줍니다.

그 다음 catch문에서 예외가 발생하면 "잡아서" 핸들링 해줍니다.

즉 try문을 실행하다가 예외가 발생하면 catch 블럭 내의 코드가 실행됩니다.

System.out.println(e.getMessage());

마지막으로 finally문은 예외 발생 유뮤와 관계없이 무조건 실행되는 코드입니다.

결과값을 출력해보면 다음과 같습니다.```

위험한 행동을 하면 예외처리를 꼭 해야합니다.
우리는 방금 예외를 Handling 했습니다.

사실 방금 예제는 try문에서 바로 예외로 가는 예제였습니다.

간단하게 try-catch finally에 대해서 알아봤습니다.

profile
평범한 개발자

0개의 댓글