1 / 31

예외 처리

예외 처리. 에외상황 ( Exception). 정의 프로그램을 실행하는 동안에 오류가 발생하여 더 이상 프로그램을 진행할 수 없는 상황이 발생될 때를 예외상황 이라 함 Exception Handling 예외상황이 발생하면 프로그램이 종료될 것이 아니라 적절한 조치를 취하여 프로그램이 계속 실행 될 수 있도록 함. 에외상황 ( Exception). Error 와 Exception 의 차이 - Error 심각한 에러로 복구가 불가능 , 프로그램 중단 - Exception

rupali
Download Presentation

예외 처리

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 예외 처리

  2. 에외상황(Exception) • 정의 • 프로그램을 실행하는 동안에 오류가 발생하여 더 이상 프로그램을 진행할 수 없는 상황이 발생될 때를 예외상황 이라 함 • Exception Handling • 예외상황이 발생하면 프로그램이 종료될 것이 아니라 적절한 조치를 취하여 프로그램이 계속 실행 될 수 있도록 함.

  3. 에외상황(Exception) • Error와 Exception의 차이 • - Error • 심각한 에러로 복구가 불가능, 프로그램 중단 • - Exception • 경미한 문제로 복구 가능, 계속 프로그램 실행

  4. 자바에서의 예외 처리 필요성 • 자바 프로그램은 인터넷/인트라넷과 연계하여 수행 가능함 : 많은 예외 상황 존재 • 물리적/논리적 거리(distance) • 보안(security) • 위치(location) • 접근(access)

  5. 예외 처리 사용 시기 • 안정적이고 오류에 강한 프로그램을 만들려고 할 경우에는 언제든 사용 • 예외 사항이 사용되는 전형적인 경우 • 파일 open • 파일이 존재하지 않을 경우 • 파일의 허가 권한이 적합하지 않은 경우

  6. 예외 처리 사용 시기의 예(계속) • 변수 사용시 • 정의 안된 변수 사용 • 변수 선언의 scope가 부적절 • 산술 연산시 • 산술 연사의 결과가 부정 / 불능 • URL 사용시 • URL의 형식이 잘못된 경우 • 질의어 사용시 • 질의어의 내용이 잘못된 경우 • 기타 여러 상황

  7. 예외 범주 java.lang.Object java.lang.Throwable java.lang.Error java.lang.Exception java.lang.RuntimeException

  8. Error 클래스 • 프로그램에서 발생하는 치명적인 문제 정의 • Out of Memory • Exception 클래스 • 모든 예외 클래스의 상위 클래스 • RuntimeExecption 클래스 • 프로그램 수행 중에 예외상황이 생기면 발생 • 예) • 배열을 사용하는 프로그램에서 배열의 첨자가 해당되는 배열의 범위를 벗어나면 에러가 발생

  9. 자바 예외의 예 • ArthimeticException - 0으로 나누고자 하는 경우에 발생 int j=3; j = j/0; • NullPointerExecption • Object를 실체화 하지 않고 사용(new 관련) • Image im[] = new Image[4]; • g.drawImage(im[0], x, y, this); • Image항목에 대한 실체화 누락 • ArrayIndexOutOf BoundsException • 배열의 실제크기보다 더 큰 항목 참조

  10. ClassCastExecption • 클래스를 불가능한 타입으로 변환시킬 때 발생 • 하나의 객체를 관련이 없는 다른 객체로 변환하고자 하는 경우에 발생 Object obj = new Object(); String str = (String) obj; • IOException • 파일 입출력시 실제로 파일이 없거나 네트워크 I/O시에 발생 • NegativeArraySizeException • 음수 크기의 배열을 생성하고자 하는 경우 발생 int a[] = new int[-1]; • MalFormedURLException • URL 을 사용할 때 URL의 형식이 잘못된 경우

  11. Exception Handling try { ... statementMaybeOccurException; ... } catch (ExceptionType1 e) { ... } catch (ExceptionType2 e) { … } finally { ... } • 예제 프로그램 • ArrayIndexOutOfBoundsException발생 • 불행히도 프로그램이 중단 • 예외 처리 • 이 프로그램을 계속 실행하도록 처리해야 함 • try … catch … finally 이용

  12. 예외발생의 예

  13. 예외 처리 • Try 예약어 • 예외가 발생될 가능성이 있는 코드를 try 블록 안에 기술 • try 블럭은 보호된 코드 블록이 됨 • Catch예약어 • Catch블럭 • 예외가 발생되었을 경우 해당하는 예외를 잡아내어 프로그램의 흐름을 복구할 것인지 종료를 할 것인지를 결정하는 프로그램을 기술하는 장소 • catch (EceptionClassName exceptionVar) { … } • 하나의 try문에 여러 개의 catch문을 이용 • 예외가 발생시 catch문을 순서적으로 체크

  14. Finally예약어 • 예외의 발생과 관계없이 항상 수행되는 코드를 기술

  15. 실행 결과

  16. 오류의 계층화(그룹화) Exception • 관련 있는 오류의 계층 구성 • catch (InvalidIndexException e) { … } • catch (ArrayException e) { … } • catch (Exception e) { … } • 일반적인 Exception이 발생하면 동작 • 되도록이면 구체적인 예외사항에 대하여 복구 처리를 하도록 ArrayException InvalidIndexException NoSuchElementException ElementTypeException

  17. 중첩된 method에서의 예외처리 • 다음과 같은 중첩 Method call에서 method1 { call method2; } method2 { call method3; } method3 { call readFile }

  18. 중첩된 method에서의 예외처리 • 위의 문장은 다음과 같이 처리 method1 { try { call method2; } catch (exception) { doErrorProcessing; } } method2 throws exception { call mehod3; } method3 throws exception { call readFile; }

  19. 사용자 정의 예외 • 상위 클래스인 Exception 클래스를 상속받아서 생성 • 또 하나의 클래스(타입) 생성 • 특정한 상황에서 사용자 정의 예외를 사용하려면 • 사용자 정의 예외의 인스턴스를 throw예약어를 이용하여 발생시킴

  20. Exception 생성 • 예외처리에 대한 class를 생성 public class ExcepionClassName extends Exception { … } • 예외 처리를 발생 시키려면 • 예외처리를 발생하는 method 선언부에 다음을 추가 • methodName throws ExcepionClassName {…};. • 예외발생시 • throw new ExcepionClassName();

  21. Exception 생성 • 예제 • class Person에서 성을 지정하는 경우, 현재 이용할 수 없는 성인 경우에 예외를 발생시키는 예외처리 InvalidLastNameException 정의 • class InvalidLastNameException extends Exception {...} • class Person에서 method setLastName()에서 예외처리 InvalidLastNameException을 발생 void setLastName(String name) throws InvalidLastNameException { if (!IsLastName(name)) throw new InvalidLastNameException(); lastName = name; };

  22. Exception 생성 테스트 class InvalidLastNameException extends Exception { } class Person { public static final String[] sLAST = {"이", "박", "노", "강", "김"}; String lastName; String Name; void setLastName(String name) throws InvalidLastNameException { if (!IsLastName(name)) throw new InvalidLastNameException(); lastName = name; }; private boolean IsLastName(String name) { for (int i=0; i<sLAST.length; i++) { if (sLAST[i].equals(name)) return true; } return false; } }

  23. Exception 생성 테스트 class ExceptionTest { public static void main(String args[]) { Person a, b, c; a = new Person(); try { a.setLastName("영"); } catch (InvalidLastNameException e) { System.out.println("\n에외처리 시작"); System.out.println("에러가 발생한 이유는 " + e.toString()); System.out.println("에외처리 끝\n"); } finally { System.out.println("이곳은 항상 실행되는 부분입니다."); } System.out.println("a의 성은 " + a.lastName + "입니다."); } }

  24. 실행 결과

  25. 예외처리 활용예제 // java.lang 패키지는 디폴트 패키지 이므로 import 하지 않아도 됨 import java.lang.*; public class UserExceptionFlow { public static void main (String args[]) { UserExceptionFlow uef = new UserExceptionFlow(); try { uef.ExceptionThrowMtd1(); } catch(MyNewException1 e1) {

  26. System.out.println(e1); } catch(Exception e2) { e2.printStackTrace(); } finally { System.out.println ("Always Printed."); } } // main() public void ExceptionThrowMtd1() throws MyNewException1 { ExceptionThrowMtd2(); }

  27. public void ExceptionThrowMtd2() throws MyNewException1 { ExceptionThrowMtd3(); } public void ExceptionThrowMtd3() throws MyNewException1 { throw new MyNewException1("MyNewException1 발생"); } }

More Related