메뉴 건너뛰기

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
번호 제목 날짜 조회 수
71 JQuery 자동완성 플러그인 JSDT설치 file 2016.09.19 8896
70 System.out.println(); 이클립스에서 자동화기능 사용 file 2016.09.19 5155
69 웹브라우저(크롬) 설정하여 웹을 실행해 보자 file 2016.09.19 7202
68 한글이 깨졌다! 인코딩(encoding)을 설정하자 file 2016.09.19 4715
67 이클립스를 화려하게 꾸며보자 file 2016.09.19 4457
66 Eclipse에서 import문 자동으로 작성하는 기능 file 2016.09.19 4811
65 Jadclipse 플러그인 설치 file 2016.09.19 3512
64 이클립스 플러그인 삭제방법 file 2016.09.19 4721
63 공통컴포넌트 생성하기 - 게시판 file 2016.09.19 5754
62 전자정부 프레임워크란? file 2016.09.19 8342
61 JAR 파일 2016.09.19 3713
60 자바용 날짜 계산 2016.09.19 4543
59 클래스 객체 생성과 사용 2016.09.19 3377
» 예외 만들기 2016.09.13 4961
57 예외 처리 기본 file 2016.09.13 3249
56 enum 2016.09.13 3404
55 for-each문 file 2016.09.13 3120
54 오토박싱 2016.09.13 3246
53 익명클래스 2016.09.13 3143
52 public static void main(String [] args) 2016.09.13 3143
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved