소통하는 개발자 Sean

초보 개발자입니다. 

 

학교에서도 선생님한테 배우는 게 더 정확하지만 

 

또래 친구들이 알려주는 것이 정확하지는 않아도 

 

더욱 추상적이고 쉬운 표현을 쓰기에 이해가 쉽게 되는 경우도 더러 있습니다.

 

저 또한 제가 이해한 느낌으로 표현하면서, 복습 효과까지 가져가려고 합니다.

 

다소 이상한 내용이 있다면 댓글로 남겨주세요!  

 

항상 감사하는 마음으로 한번 더 배우겠습니다.

 

감사합니다!


 

책에 나와있는 예제를 따라 치다보면 throw, try, catch, finally와 같은 키워드들이 나온다.

 

여태까지는 성급히 따라치기 바빴지만, 여러 문서를 참고하며 이해하다 보니 

 

생각보다 별게 아니라는것을 느꼈다. 

 

잘 알지는 못하지만 다음에 이 글을 보고 다시 이해할 수 있도록

 

내 표현으로 정리해두려고 한다.

 

♣ 예외는 이런 저런 이유로 발생한다.

  • Exception in thread "main" java.lang.ArithmeticException: / by zero
  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

'에러'가 아닌 '예외'는 보통 프로그래머의 실수로 발생하는 경우가 많다. 

이런 예외를 처리해주기 위해, 코드를 작성하는 게 throw, try, catch, finally 와 같은 키워드이다.

마치, "요런것은 예외로 처리해서, 내가 지정한 방식으로 처리해야지" 같은 개념이다.

어떻게 보면 'if~else'와 비슷한 면도 있는 것 같다.

 

자잘한 코드 말고, 큼지막한 예제들로 이해해보자.

public class Exception_Tistory {
    public void shouldBeRun() {
        System.out.println("finally는 무적권 실행!!");
    }
    public static void main(String[] args) {
        Exception_Tistory test = new Exception_Tistory();
        int c;
        
        try {			// try 블록안에서 Exception이 발생하면 catch로 넘어감
            c = 4 / 0;
            System.out.println("c의 값은 " + c);
           
        } catch (Exception e) { 	// try 블록안에서 예외가 발생하면
            System.out.println("Exception 발생!!!");
            
        } finally {			// Exception이 발생해도 무조건 실행됨
            test.shouldBeRun();
        }
    }
}
"Exception 발생!!!"
"finally는 무적권 실행!!"

* try { }  - 블록안에서 Exception이 발생하면 catch로 달려간다 (catch의 파라미터에 따라 다를 수 있음).

* catch { } - 설치해 놓은 트랩(Exception)이 작동하면 지정해놓은 어떤 일이 발생함 

* fianlly { } - 예외가 발생하던 말던, 무조건 실행되는 코드!

 

♣ throw - 예외 발생시키기  

try-catch-finally만 사용하면 될 것을, 굳이 왜 throw를 사용하는 하는 걸까?

try만 사용한다면 시스템이 Exception이라고 지정해 놓은 것만 catch로 넘어가기 때문이다.

누군가 나를 '바보'라고 부른다면 나는 그것을 Exception으로 처리하여 못 들은 척할 수 있다.

 

참고로 Exception은 크게 두 가지로 구분된다.

  • RuntimeException     // 실행 시 발생하는 예외
  • Exception              // 컴파일 시 발생하는 예외, 예측이 가능하다

예시를 보자.

public class Test {

    public void sayNick(String nick) throws Exception {  // 메소드에 throws를 붙여주면, 호출한 놈(main)이 처리를 해야합니다.
        if (nick.equals("바보")) {    // 누군가 나한테 바보라고 한다면, 예외처리를 통해 못 들은척 할꺼야.
            throw new Exception();   // 예외처리 발생!
        }
        System.out.println("당신의 별명은 " + nick + " 입니다. ");
    }

    public static void main(String[] args) {
        Test test = new Test();     // 현 클래스를 객체화 합니다.
        try {
            test.sayNick("멋쟁이");
            test.sayNick("바보");
        } catch (Exception e) {
            System.out.println("Exception 발생!! - 바보라고 하지 마세요");
        }
    }
}

throw 사용해서, '바보'를 예외처리해주었습니다. 

간단하게라도 이해되셨기를 바랍니다~~

 

출처 : https://wikidocs.net/229

profile

소통하는 개발자 Sean

@Sean-creative

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!