예외(Exception) (2)

김재익·2023년 6월 16일
0

JAVA

목록 보기
7/18
post-thumbnail

예외클래스를 만들어 위험을 알릴 수 있다.

예외클래스

Exception을 상속받아서 예외 클래스로 만들어주고 해당 예외가 어떤 위험을 가지고 있는지 메세지를 던져줄 수 있다.

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

Throws와 Throw

Throws

  • throws : 던지다 (=예외를 던지다 / 발생시키다)
  • 메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어
  • 위험할 수 있다는 flag를 throws로 선언한 것
  • Throws가 명시된 메소드를 그냥 호출할 경우 컴파일 에러가 난다.

Throw

  • 메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어
  • 실제로 던지는 예외 객체 하나와 같이 써야함
  • 일반 메서드의 return 키워드처럼 throw 아래의 구문은 실행 되지 않고 throw문과 함께 메서드가 종료됨.
public class OurClass {
    private final boolean just = true;
	
    // throws로 해당 메소드는 OurBadException에러가 발생할 수 있다는 것을 알림
    public void thisMethodIsDangerous() throws OurBadException {
        // custom logic
        // custom logic
        // custom logic
        
        // 해당 조건에 걸리면 고의적으로 에러를 발생시킴
        if (just) {
        	// OurBadException에러를 발생시키고 메서드를 종료함
            throw new OurBadException();
        }
    }
}

try - catch - finally

실제로 예외를 처리하여 컴파일에러를 방지할 때 사용되는 구문

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());
        throw new RuntimeException(e);
	} finally {
    	// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
        // 무조건 실행되는 코드가 들어가는 블럭입니다.
        System.out.println("예외 처리를 handling했음 정상 처리 되던, 예외가 발생하던 finally는 항상 실행됨");
	}
}

print로 에러의.getMessage()를 출력하면 인지하기가 굉장히 어렵기 때문에
RuntimeException를 새로 만들고 발생한 에러(e)를 넣어 던져주면 경로 확인이 가능하다.

profile
개발자호소인

0개의 댓글