JAVA

[JAVA] 예외 처리 (3)

개발 공주 2023. 6. 13. 11:42
728x90

예외 발생과 try-catch, finally 문

 

예외처리의 흐름 미리보기

📌 예시에서 주의깊게 봐야 할 것

  1. 우리가 예외를 어떻게 정의하고,
  2. 예외가 발생 할 수 있음을 알리고,
  3. 사용자는 예외가 발생 할 수 있음을 알고 예외를 핸들링하는지의 흐름입니다.

예외 정의하기

  • 직접 다음과 같이 우리만의 에러를 정의 할 수 있습니다.
class OurBadException extends Exception {
	public OurBadException() {
		super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
	}
}

클래스를 만들고, 메서드를 만들며 우리의 메서드가 위험하다고 알리기(throw, throws)

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

📌 우리가 메서드를 선언 할 때, 이 메서드가 위험하다는것을 미리 예측해야 합니다. 그리고 예측이 되어 있다면, 실제로 throw 키워드와 함께 이 메서드가 위험하다고 알려야 합니다.


 

우리가 위험한 메서드를 사용한다면, 예외를 handling 하기

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

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

    }
}
  1. 위험 감지하기
    1. 우리는 특정한 클래스의 메서드를 사용할 때, 특히 우리가 작성한 코드가 아니라면 더더욱, 이 메서드가 위험한지 알아봐야 합니다. 보통 메서드의 명세를 확인 할 수 있으며 intellij를 사용중이라면, 커서를 올려 간단하게 확인 할 수 있습니다.

  1. 위험을 감지했다면, try-catch(finally) 키워드 이용하기
    • try - catch 는 각각 중괄호{} 를 통해 실행할 코드들을 담습니다.
    • try 단어의 “시도한다” 라는 뜻에 맞게 의 중괄호{} 안에는 예외가 발생할 수 있지만 실행을 시도할 코드를 담습니다.
    • catch 단어의 “잡는다”라는 의미에 맞게 중괄호{} 안에는 try 안에있는 코드를 실행하다가 예외가 났을때 실행할 코드를 담습니다.
      • catch 는 소괄호() 를 통해 어떤 예외클래스를 받아서 처리할지 정의해주어야 합니다.
      • catch 로 모든 예외를 다 받고 싶으면 Exception 을 넣어주면 됩니다.
      • catch 로 일부 예외만 받아서 처리하고 싶으면 해당 예외 클래스명을 넣어주면 됩니다.
      • 1개의 try 문에 catch 문은 여러개 사용할 수 있습니다. ex) 1try : 4catch
    • 기존 try - catch의 맨 마지막에 finally 를 붙여서 마지막에 반드시 실행할 코드를 넣을 수 있습니다.

'JAVA' 카테고리의 다른 글

[JAVA] Generic  (1) 2023.06.14
[JAVA] 예외 처리 (4)  (0) 2023.06.14
[JAVA] 예외 처리 (2)  (0) 2023.06.13
[JAVA] 예외처리 (1)  (0) 2023.06.12
[JAVA] 인터페이스 다형성  (0) 2023.06.01