자바기본문법

자바의 예외처리

1. 자바는 예외를 '어떻게' 처리하나

예외처리를 하는 다양한 방법이 있을줄 알았다. 하지만 책에 나온 것이 전부였다. 오랫동안 검색해 보아도, try/catch 블록 외에는 그 어떤 방법도 찾지 못했다. 번역본이라고 발췌/축약해버린 것도 아니었고, 기본서라고 고급 스킬을 숨겨두고 있는 것도 아니었다. try/catch 블록은 다음과 같이 사용한다.

try{
    //예외가 발생할 수 있는 코드
}catch(예외타입 예외변수명){
    //예외가 발생하면 실행할 코드
}catch(예외타입2 예외변수명2){
    //예외가 발생하면 실행할 코드2
}

메인함수 옆에, '이 코드는 예외를 발생시키고 처리할 수 있다'고 표시해둔다. 예외발생을 '예외를 던진다(throws)'고 하고, 예외처리는 '예외를 받는다(catch)'고 한다. 메인함수 옆에 쓰는 문구도 딱 그 내용이다. 'throws 예외타입'.

- 상세한 설명(영문) : http://tutorialspoint.com/java/java_exceptions.htm

 

2. 자바는 '어떤' 예외를 처리하는가

자바의 처리방법은 위의 try/catch블록만 알고 있어도 된다. 그런데 예외타입은 각 클래스마다 다르고, 클래스 메소드 마다 다르고, 예외가 발생하는 이유도 달라서, 직접 자바 API를 보는 수밖에 없다.

JAVA API : https://docs.oracle.com/javase/7/docs/api/

예외 목록: https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html

API 번역문 : http://changki.net/

예를 들어서, java.util.Scanner의 예외에는 InputMismatchException가 있다. 다음과 같이 코드를 짤 수 있다.

import java.util.*;
import java.util.Scanner;
public class Main{
    public static void main(String args[])throws InputMismatchException{
        Scanner sc = new Scanner(System.in);
        int input=0;
        boolean flag = false;
        while(!flag){
            try{
                input = sc.nextInt();
                flag = true;
            }catch(InputMismatchException e){
                System.out.println("예외발생!! 다시 시도해주세요.");
            }
        }
        System.out.println(input+" 이(가) 입력되었습니다.");
    }
}

 

3. 자바는 왜 이렇게 번거로운가

카더라에 따르면, 자바는 협업을 위해 만들어진 프로그래밍 언어라 카더라. 여러 프로그래머가 동시에 작업하더라도 예외상황을 명확하게 파악하기 위해, 예외처리를 강제하고 있다. 그러나 또 다른 카더라에 따르면, 이런 예외처리 작업이 너무 귀찮은 나머지, 일반적으로는 IOException으로 모든 예외를 퉁치고 넘어간다고 카더라

댓글

댓글 본문
작성자
비밀번호
버전 관리
카스테라는없다
현재 버전
선택 버전
graphittie 자세히 보기