메뉴 건너뛰기

2016.09.13 19:01

예외 만들기

조회 수 4961 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

예외 만들기


1. 예외 발생시키기

키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다.

1) 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음

  Exception e = new Exception("고의로 발생시켰음");


2) 키워드 throw를 이용해서 예외를 발생시킨다.

  throw  e;


class ExceptionEx

{

public static void main(String args[]) 

{

try {

Exception e = new Exception("고의로 발생시켰음.");

throw e; // 예외를 발생시킴

//  throw new Exception("고의로 발생시켰음.");  // 위의 두 줄을 한 줄로 줄여 쓸 수 있다.

} catch (Exception e) {

System.out.println("에러 메시지 : " + e.getMessage());

e.printStackTrace();

}

System.out.println("프로그램이 정상 종료되었음.");

}

}

실행결과)

에러 메시지 : 고의로 발생시켰음.

프로그램이 정상 종료되었음.

java.lang.Exception: 고의로 발생시켰음.

at example.demo.main(demo.java:8)


2. 사용자 정의 예외 만들기

기존의 정의된 예외 클래스 외에 필요에 따라 프로그래머가 새로운 예외 클래스를 정의하여 사용할 수 있다. 보통 Exception클래스로부터 상속받는 클래스를 만들지만, 필요에 따라서 알맞은 예외 클래스를 선택할 수 있다.

class MyException extends Exception{

MyException(String msg){// 문자열을 매개변수로 받는 생성자

super(msg);// 조상인 Exception 클래스의 생성자를 호출한다.

}

}


Exception 클래스로부터 상속받아서 MyException클래스를 만들었다. 필요하다면, 멤버변수나 메서드를 추가할 수 있다. Exception 클래스는  생성 시에 String값을 받아서 메시지로 저장할 수 있다. 사용자 정의 예외 클래스도 메시지를 저장할 수 있으려면, 위에서 보는 것과 같이 String을 매개변수로 받는 생성자를 추가해주어야 한다.

class MyException extends Exception{// 에러 코드 값을 저장하기 위한 필드를 추가 했다.

private final int ERR_CODE;// 생성자를 통해 초기화 한다.

MyException(String msg, int errcode){ //생성자

super(msg);

ERR_CODE=errCode;

}

MyException(String msg){// 생성자

this(msg, 100)l// ERR_CODE를 100(기본값)으로 초기화한다.

}

public int getErrCode(){// 에러 코드를 얻을 수 있는 메서드도 추가한다.

return ERR_CODE;// 이 메서드는 주로 getMessage()와 함께 사용될 것이다.

}

}

이전의 코드를 좀더 개선하여 메시지뿐만 아니라 에러코드 값도 저장할 수 있도록 ERR_CODE와 getErrCode()를 MyException클래스의 멤버로 추가했다.

이렇게 함으로써 MyException이 발생했을 때, catch블럭에서 getMessage()와 getErrCode()를 사용해서 에러코드와 메시지를 모두 얻을 수 있을 것이다.


class NewExceptionTest {

public static void main(String args[]) {

try {

startInstall(); // 프로그램 설치에 필요한 준비를 한다.

copyFiles(); // 파일들을 복사한다. 

} catch (SpaceException e) {

System.out.println("에러 메시지 : " + e.getMessage());

e.printStackTrace();

System.out.println("공간을 확보한 후에 다시 설치하시기 바랍니다.");

} catch (MemoryException me) {

System.out.println("에러 메시지 : " + me.getMessage());

me.printStackTrace();

System.gc(); //  Garbage Collection을 수행하여 메모리를 늘려준다.

System.out.println("다시 설치를 시도하세요.");

} finally {

deleteTempFiles(); // 프로그램 설치에 사용된 임시파일들을 삭제한다.

} // try의 끝

} // main의 끝


   static void startInstall() throws SpaceException, MemoryException { 

if(!enoughSpace()) // 충분한 설치 공간이 없으면...

throw new SpaceException("설치할 공간이 부족합니다.");

if (!enoughMemory()) // 충분한 메모리가 없으면...

throw new MemoryException("메모리가 부족합니다.");

   } // startInstall메서드의 끝


   static void copyFiles() { /* 파일들을 복사하는 코드를 적는다. */ }

   static void deleteTempFiles() { /* 임시파일들을 삭제하는 코드를 적는다.*/}

   

   static boolean enoughSpace()   {

// 설치하는데 필요한 공간이 있는지 확인하는 코드를 적는다.

return false;

   }

   static boolean enoughMemory() {

// 설치하는데 필요한 메모리공간이 있는지 확인하는 코드를 적는다.

return true;

   }

} // ExceptionTest클래스의 끝


class SpaceException extends Exception {

SpaceException(String msg) {

  super(msg);

   }


class MemoryException extends Exception {

MemoryException(String msg) {

  super(msg);

   }

}

실행결과)

에러 메시지 : 설치할 공간이 부족합니다.

example.SpaceException: 설치할 공간이 부족합니다.

at example.ExceptionEx18.startInstall(ExceptionEx18.java:24)

at example.ExceptionEx18.main(ExceptionEx18.java:6)

공간을 확보한 후에 다시 설치하시기 바랍니다.

MemoryException과 SpaceException, 이 두개의 사용자정의 예외 클래스를 새로 만들어서 사용했다

Space Exception은 프로그램을 설치하려는 곳에 충분한 공간이 없을 경우에 발생하도록 했으며, MemoryException은 설치작업을 수행하는데 메모리가 충분히 확보되지 않았을 경우에 발생하도록 하였다. 이 두 개의 예외는 startInstall()을 수행하는 동안에 발생할 수 있으며, enoughSpace()와 enoughMemory()의 실행 결과에 따라서 발생하는 예외의 종류가 달라지도록 했다.



List of Articles
번호 제목 날짜 조회 수
31 [자바(스프링&mybatis&jsp) 프로젝트 & 아파치 &톰켓 연동 ] 이클립스 프로젝트 생성 순서08.commons-logging 설치 file 2016.08.18 4458
30 회원가입 양식에서 (필수/옵션)필드 추가/제거하기 file 2016.08.29 4471
29 자바용 날짜 계산 2016.09.19 4543
28 No bean name '***Service' is defined 오류나는 이유 및 해결방법 file 2016.08.29 4561
27 예외처리(Exception handling)방법 file 2016.09.21 4585
26 기존 프로젝트, Table, View 모두 다 삭제하기 file 2016.08.29 4608
25 GET 파라메타 쿼리문자열 컨트롤 : getQueryString 2016.12.09 4705
24 한글이 깨졌다! 인코딩(encoding)을 설정하자 file 2016.09.19 4715
23 이클립스 플러그인 삭제방법 file 2016.09.19 4721
22 간단한 개인홈페이지 만들어보기 file 2016.08.29 4751
21 Eclipse에서 import문 자동으로 작성하는 기능 file 2016.09.19 4811
20 자바 XML 제어 라이브러리 XStream : JAVA 2016.12.09 4918
19 다양한 문자 조합을 이용한 카운팅 구하기 2016.12.09 4941
18 MySQL에 All-in-one 설치시 webmaster로 로그인 안되는 문제 해결을 위한 2가지 수정사항 file 2016.08.29 4954
» 예외 만들기 2016.09.13 4961
16 전자정부프레임워크 v2.5, v2.6 오라클 세팅하기 file 2016.09.12 5109
15 접근 제한자 private/ protected/ public / default file 2016.10.06 5136
14 System.out.println(); 이클립스에서 자동화기능 사용 file 2016.09.19 5158
13 스프링(Spring)의 Validator 기능을 사용하다가 '정의되지 않음 또는 null 참조인 'type' 속성을 가져올 수 없습니다.'라는 오류를 만났을 때 해결방법 file 2016.08.29 5165
12 날짜 시간 포맷 제어 자바 클래스 : JAVA DateUtils Date time file 2016.12.09 5233
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved