본문 바로가기

Java Programming

하나의 try 여러개의 catch

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
 에자일 자바 책에서 예외처리 부분을 맡았기 때문에 그 부분에 대해서 많이 공부를 했었는데.. 이제보니까 전혀 아니군요.. 공부도 잘 안되고 해서.. 학교 선배가 알려줬던 자바 검은띠 따기위해 수련을 하는 자바 도장에 열심히 다니고 있는데요.. 시험만 봤다하면 반타작 치기 일수입니다. 일단은 영어가 개판이기때문에 오역하는 경우가 많은데요.. 뭐.. 나중에는 더 나아지겠거니 합니다. 처음부터 잘할 수가 없기 때문에 차근차근 하고 있습니다.

사용자 삽입 이미지

이런 문제가 있습니다. 여러분들이라면 어떻게 답변을 하시겠습니까 ^^? 저는 이렇게 생각을 했습니다. try마다 그에 상응하는 catch 문이 존재 할 것이다.. 즉슨 3가지의 발생할수 있는 예외가 있다면 3번의 try와 3번의 catch를 사용하여 해결을 해주겠거니... 하지만 역시 해주겠거니가 문제 더군요. 이런 프로그래밍 언어는 말로 해봐야 소용없는걸 간과 하고 있었던거네요.. 그래서 문항을 다 읽어보지도 않고 1번이라고 선택했습니다.

문제가 틀리고 나서 왜 틀렸는지 궁금해 하던도중.. 이런글을 찾았습니다.

만약 예외를 여러개를 처리하는 경우가 있다면 어떨까... 그럼 아마 여러개의 try/catch 구문이 나와야 될 것이다. 하지만 이런 방법보다 편한 방법이 있다. try{} 은 한번만 쓰고 catch 문을 여러 개를 사용하는 것이다. 형식을 보자.

try{
}catch(CException e){
}catch(BException e){
}catch(AException e){
       :
}


예외가 try{}문에서 발생하면 해당 catch{} 블럭을 순차적으로 찾아 내려가면서 해당 Exception객체를 처리하는 catch{}블록안의 코드를 수행하게 된다. 이 때 주의할 점은 catch()의 Exception 클래스간에 상속 관계가 있다면 하위 클래스에 해당하는 Exception 클래스를 위에 기술하고 상위 클래스에 해당하는 Exception 클래스를 아래에 기술한다. 즉 위의 Exception 클래스의 상속관계를 나타낸다면, A>>B>>C 로서 맨 마지막에 위치한 AException 클래스가 상위 클래스가 된다.

- 출처 : http://www.javastudy.co.kr/docs/getjava/lec11/11-2try_catch.htm

아.. -_- 한심합니다 진짜로.. 그때 예외처리 공부를 제대로 했는지가 의심이 갑니다.. ㅠㅠ 반성의 의미에서 직접 코딩을 해보았습니다. 안습클히 ㅠㅠ

import java.util.*;

public class ExceptionTest {

      public static void main(String[] args) {

            Scanner sc = new Scanner(System.in);

            try {

                   // 정수가 아닌 값을 입력하면 NumberFormatException 발생

                   int exceptionMaker = new Integer(sc.next());

            } catch (NumberFormatException e) {

                   System.out.println("숫자 아님!");

            } catch (Exception e) {

                   System.out.println(" 문제가 발생!");

            }

      }

}

아주 보란듯이 잘 됩니다 -_-;; 위에서도 이야기 했지만 여러개의 cat문을 사용 할 경우에 주의 할 점은 발생하는 예외의 상하 관계에 따라서 순서를 잘 지정해줘야 한다는 겁니다. 만약에 위에 소스에서 NumberFormatException 보다 앞서 더 포괄적인 Exception 클래스로 먼저 예외를 처리 한다면 아래에 있는 catch 블록 안에는 갈래야 갈수도 없는 상황이 발생하고 물론 컴파일 조차 되지 않습니다.

많지도 적지도 않은 시간동안 자바를 공부하면서 느낀것이지만 그동안 쌓아왔던 자바의 기초가 굉장히 투박하다는 것을 알았습니다. 한마디로 기반이 튼실하지 못하다는것이죠 -_-;; 기초부터 천천히 다시 공부하도록 해야겠습니다. 이전에는 더 많은 것들 궁금해하고 그저 새로운것을 갈구하기에 급급했는데.. 순서가 잘못된것 같네요. 초심으로 돌아가야할 시점인듯 합니다.