예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

Similar documents
9장.예외와 단정

Microsoft PowerPoint - lec11_1516.ppt [호환 모드]

슬라이드 1

Microsoft PowerPoint - CSharp-10-예외처리

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Template

Cluster management software

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

Semantic Consistency in Information Exchange

PowerPoint 프레젠테이션

PowerPoint Presentation

歯JavaExceptionHandling.PDF

C++ Programming

슬라이드 1

PowerPoint Presentation

No Slide Title

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

제11장 프로세스와 쓰레드

4장.문장

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

Design Issues

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

12-file.key

Microsoft PowerPoint - lec12 [호환 모드]

PowerPoint Presentation

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Network Programming

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2강

PowerPoint 프레젠테이션

PowerPoint Presentation

02 C h a p t e r Java

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

rmi_박준용_final.PDF

교육자료

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - RMI.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - 03-TCP Programming.ppt

슬라이드 1

PowerPoint Template

PowerPoint Presentation

신림프로그래머_클린코드.key

PowerPoint Presentation

슬라이드 1

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

자료형 크기 값의범위 접미문자 Byte형 1바이트 0~255까지 없음 Boolean형 2바이트 True, False 없음 Integer형 2바이트 ~ 32767까지 % Long형 4바이트 -2,147,483,648 ~ 2,147,483,648까지 & Sin

Cluster management software

PowerPoint Presentation

Java ...

PowerPoint 프레젠테이션

Microsoft Word - java19-1-midterm-answer.doc

10. 예외처리 예외는어떤방법으로든지해결되어야합니다. 직접해결하기위해서는 try~catch 구문을사용할수도있으며 throws 구문을통해예외가발생했을때호출한메서드로예외를넘겨줄수도있습니다. 이장에서는예외의종류와예외처리방법, 사용자정의예외클래스와예외를발생시키는방법들에대해설명

JUNIT 실습및발표

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

ThisJava ..

Microsoft PowerPoint - lec12 [호환 모드]

Microsoft PowerPoint - Chapter 6.ppt

Cluster management software

쉽게 풀어쓴 C 프로그래밊

gnu-lee-oop-kor-lec11-1-chap15

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Spring Boot

untitled

PowerPoint Presentation

No Slide Title

자바 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java2-lecture2.ppt [호환 모드]

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - lec4_1 [호환 모드]

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - lec2.ppt

비긴쿡-자바 00앞부속

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Transcription:

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 kkman@sangji.ac.kr 2

예외 (exception) 실행시간에발생하는에러 (run-time error) 프로그램의비정상적인종료잘못된실행결과 예외처리 (exception handling) 기대되지않은상황에대해예외를발생야기된예외를적절히처리 (exception handler) kkman@sangji.ac.kr 3

단정 (assertion) 프로그램이올바르게실행되는데필요한조건을선언할수있는언어기능 예외처리를언어시스템에서제공 PL/I 예외처리 Ada C++ 응용프로그램의신뢰성 (reliability) 을높임. 예외검사와처리를위한프로그램코드를소스에깔끔하게삽입 kkman@sangji.ac.kr 4

예외도하나의객체로취급 예외를위한클래스를정의. 예외클래스 모든예외는형 (type) 이 Throwable 클래스또는그의서브클래스들중에하나로부터확장된클래스의객체 일반적으로프로그래머는 Throwable 의서브클래스인 Exception 을확장하여새로운예외클래스를만들어사용 class UserErr extends Exception { class UserClass { UserErr x = new UserErr(); //... if (val < 1) throw x; kkman@sangji.ac.kr 5

예외에관련된메시지를스트링형태로예외객체에담아전달 class UserErr extends Exception { UserErr(String s) { super(s); // constructor class UserClass { //... if (val < 1) throw new UserErr("user exception throw message"); 예외처리기에서, System.out.println(x.getMessage()); kkman@sangji.ac.kr 6

User-defined exception System-defined exception Throwable 클래스에는예외가일어난상황을설명하는메시지들을포함하고있다. kkman@sangji.ac.kr 7

예외의종류 System-defined exception(predefined exception) Error 클래스, RuntimeException 클래스 Programmer-defined exception Error 클래스 정상적인응용프로그램에서는수용할수없는심각한에러 Exception 클래스 정상적인응용프로그램의실행에서발생가능한예외를의미프로그래머에의해처리가능 kkman@sangji.ac.kr 8

시스템정의예외 (system-defined exception) 프로그램의부당한실행으로인하여시스템에의해묵시적으로발생하는예외 Error 와 RuntimeException 클래스로부터확장된예외 더이상프로그램의실행을지속할수없을때자바시스템에의해자동적으로생성 야기된예외에대한예외처리기의유무를컴파일러가검사하지않음, unchecked exception 시스템예외의종류 ArithmeticException, IndexOutOfBoundsException, NegativeArraySizeException, kkman@sangji.ac.kr 9

IndexOutOfBoundsException : 배열, 스트링, 벡터등과같이인덱스를사용하는객체에서인덱스의범위가벗어날때발생 ArrayStoreException : 배열의원소에잘못된형의객체를배정하였을때발생 NegativeArraySizeException : 배열의크기를음수로지정하였을때발생 NullPointerException : null 을사용하여객체를참조할때발생 SecurityException : 보안을위반했을때보안관리자 (security manager) 에의해발생 Applet 또는 RMI IllegalMonitorStateException : 모니터 (monitor) 의소유자가아닌스레드가 wait 또는 notify 메소드를호출했을때발생 kkman@sangji.ac.kr 10

프로그래머정의예외 프로그래머가필요에의해정의 Exception 클래스의서브클래스 프로그래머에의해의도적으로발생 발생한예외에대한예외처리기가존재하는지컴파일러에의해검사, 예외처리기가없으면에러 checked exception class UserException extends Exception { kkman@sangji.ac.kr 11

프로그래머정의예외의예제프로그램 [UserDefinedException.java] class UserErr extends Exception { UserErr(String s) { super(s); // constructor class UserDefinedException { public static void tryexception (int val) throws UserErr { if (val < 1) throw new UserErr("user exception throw message"); public static void main(string[] args) { try { System.out.println("try user exception..."); tryexception(0); catch(usererr e) { System.out.println( e.getmessage() ) ; 실행결과 : try user exception... user exception throw message kkman@sangji.ac.kr 12

예외발생 시스템정의예외시스템에의해묵시적으로발생프로그래머정의예외프로그래머가명시적으로발생 throw 구문 시스템정의예외나프로그래머정의예외를명시적으로발생시키는구문 구문형태 : throw ThrowableObject; kkman@sangji.ac.kr 13

throw 를이용한예외발생예 [ 예제 9.3 - ThrowStatement.java] public class ThrowStatement extends Exception { public static void exp(int ptr) { if (ptr == 0) throw new NullPointerException(); public static void main(string[] args) { int i = 0; ThrowStatement.exp(i); 실행결과 : java.lang.nullpointerexception at ThrowStatement.exp(ThrowStatement.java:4) at ThrowStatement.main(ThrowStatement.java:8) kkman@sangji.ac.kr 14

throws 절 프로그래머정의예외가발생하는경우, 예외처리기를갖고있지않으면메소드선언부분에명시한다. 선언형태 : modifiers_and_returntype methodname(params) throws e 1,...,e k { 명시해주는이유는메소드가정상적인복귀외에예외에의해복귀할수있다는것을알려주는것이다. 시스템정의예외는명시해주지않는다. kkman@sangji.ac.kr 15

try-catch-finally 구문 예외를검사하고처리해주는문장 구문형태 : try { // try 블록 catch (ExceptionType1 identifier) { // catch 블록 catch (ExceptionType2 identifier) { // catch 블록 finally { // finally 블록 try 블록 : 예외검사되는블록 catch 블록 : 예외가처리되는블록 kkman@sangji.ac.kr 16

예외처리기의실행순서 1. try 블록내에서예외가검사되고또는명시적으로예외가발생하면, 2. 해당하는 catch 블록을찾아처리하고, 3. 마지막으로 finally 블록을실행한다. Default 예외처리기 시스템정의예외가발생됐는데도불구하고프로그래머가처리하지않을때처리됨 단순히에러에대한메시지를출력하고프로그램을종료하는기능 kkman@sangji.ac.kr 17

[ 예제 9.8- FinallyClause.java] public class FinallyClause { static int count = 0; public static void main(string[] args) { while (true) { try { if (++count == 1) throw new Exception(); if (count == 3) break; System.out.println(count + ") No exception"); catch (Exception e) { System.out.println(count + ") Exception thrown"); finally { System.out.println(count + ") in finally clause"); // end while System.out.println("Main program ends"); 실행결과 : 1) Exception thrown 1) in finally clause 2) No exception 2) in finally clause 3) in finally clause Main program ends kkman@sangji.ac.kr 18

호출한메소드로예외를전파 (propagation) 하여특정메소드에서모아처리 예외처리코드의분산을막을수있음 예외전파순서 예외를처리하는 catch 블록이없으면, 호출한메소드로예외를전파 예외처리기를찾을때까지의모든실행은무시 kkman@sangji.ac.kr 19

java.lang.arithmeticexception: / by zero at Propagate.orange(Propagate.java:4) at Propagate.apple(Propagate.java:7) at Propagate.main(Propagate.java:11) kkman@sangji.ac.kr 20

예외발생가능성에대한명시 시스템정의예외 예외의발생가능성을알릴필요없음 프로그래머정의예외 해당메소드에서처리하지않을경우, 예외의종류를알려야함 throws 절사용 public void methoda() throws MyException { // if (someerrcondition()) throw new MyException(); // kkman@sangji.ac.kr 21

단정프로그램이올바르게실행되는데필요한조건을선언하는프로그래밍언어의기능 단정선언방법 1. 단정조건명시 2. 단정조건명시 + 문자열정보형식 assert < 조건식 > [: < 문자열정보 >]; 단정조건참이나거짓의결과가되는조건식참 : 실행이계속됨거짓 : AssertionError 예외발생 kkman@sangji.ac.kr 22

단정의사용예 [ 예제 9.13 - AssertExample.java] public class AssertExample { static void drawbox(int x, int y, int w, int h) { assert x >= 0; assert y >= 0; assert w >= 0; assert h >= 0; // draw the box. public static void main(string[] args) { drawbox(100, 200, 10, 20); drawbox(0, -10, 5, 30); 실행결과 : Exception in thread "main" java.lang.assertionerror at AssertWithStringExample.drawBox(AssertExample.java:4) at AssertWithStringExample.main(AssertExample.java:13) kkman@sangji.ac.kr 23

문자열정보가추가된단정의사용예 [ 예제 9.13 - AssertWithStringExample.java] public class AssertWithStringExample { static void drawbox(int x, int y, int w, int h) { assert (x >= 0) : "x must be 0 or more."; assert (y >= 0) : "y must be 0 or more."; assert (w >= 0) : "w must be 0 or more."; assert (h >= 0) : "h must be 0 or more."; // draw the box. public static void main(string[] args) { drawbox(100, 200, 10, 20); drawbox(0, -10, 5, 30); 실행결과 : Exception in thread "main" java.lang.assertionerror: y must be 0 or more. at AssertWithStringExample.drawBox(AssertWithStringExample.java:4) at AssertWithStringExample.main(AssertWithStringExample.java:13) kkman@sangji.ac.kr 24

자바의기본설정 단정검사를하지않음 단정에명시된조건검사는실행속도를느리게함 단정조건검사설정 단정조건검사 <jdk_path>/bin/java -ea < 실행할클래스이름 > <jdk_path>/bin/java -enableassertions < 실행할클래스이름 > 단정조건무시 <jdk_path>/bin/java -da < 실행할클래스이름 > <jdk_path>/bin/java -disableassertions < 실행할클래스이름 > kkman@sangji.ac.kr 25

유사점 자바프로그램의신뢰성향상을위해사용 실행중에문제가생기면예외발생 차이점 단정실행에필요한조건을검사단정은자바가상기계의실행옵션에따라검사생략이가능 예외 프로그램상에서발생하는예기치않은구문들을처리 항상예외처리구문을수행 kkman@sangji.ac.kr 26