Download presentation
Presentation is loading. Please wait.
1
10장 예외 (Exceptions)
2
예외(Exceptions) 예외처리는 객체지향적 설계에서 있어서 중요한 특성이다. 10장은 다음에 초점을 두고 있다:
예외처리는 객체지향적 설계에서 있어서 중요한 특성이다. 10장은 다음에 초점을 두고 있다: 예외의 목적 예외 메시지 try-catch 문 예외의 전파 예외 클래스 계층 GUI 약어와 도구 팁 추가 GUI 콤포넌트와 컨테이너 © 2004 Pearson Addison-Wesley. All rights reserved
3
개요 예외 처리 try-catch 문 예외 전파 예외 클래스 입출력 예외 도구 팁과 약서 콤보 박스 스크롤 페인과 스프릿 페인
© 2004 Pearson Addison-Wesley. All rights reserved
4
예외(Exceptions) 예외 Exception object is a first-class object
예외 (상황): 심각하지 않은 에러 혹은 비정상적 상황 예외 발생 시 계속 수행할 수 있도록 처리해야 한다 Exception object is a first-class object 일반 object처럼 클래스를 이용하여 정의되고 일반 object처럼 사용될 수 있다. 일반 object와 차이점 throw 될 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
5
예외(Exceptions) 예외는 프로그램은 실행시간에 발생(thrown)되며, 원한다면 잡아서(catch),
적절히 처리할(handle) 수 있다. 프로그램은 정상적인 실행부분과 예외적인 실행부분으로 분리될 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
6
예외처리(Exception Handling)
예외 상황의 예들 0으로 나누려는 시도 범위를 벗어난 배열의 첨자 찾을 수 없는 파일 정상적으로 마칠 수 없는 I/O 연산의 요청 널(null)참조를 따라가려는 시도 프로그램은 다음 세가지 방법중의 하나로 예외를 처리할 수 있다: 예외를 무시한다. 예외를 발생한 곳에서 처리한다. 예외를 프로그램의 다른 지점에서 처리할 수 있다. 예외가 처리되는 방법은 중요한 설계의 고려사항이다. © 2004 Pearson Addison-Wesley. All rights reserved
7
예외처리 예외가 프로그램에 의하여 무시되면 See Zero.java 적절한 메시지를 출력하고 종료된다.
그 메시지는 호출 스택 트레이스(call stack trace)를 포함한다. 예외가 발생한 위치, 메소드와 문장 번호를 함께 보여준다. See Zero.java © 2004 Pearson Addison-Wesley. All rights reserved
8
Zero.java <Output>
Exception in thread “main” java.lang.ArithmeticException: / by zero at Zero.main(Zero.java:17) © 2004 Pearson Addison-Wesley. All rights reserved
9
try-catch 문 발생된 예외를 처리하기 위한 문장 try { … } catch (E1 x) { … } …
catch (En x) { … } 예외가 발생하는 문장: try 블록 내부 예외를 처리하는 문장: 하나 이상의 catch 절 각 catch 절은 서로 다른 형의 예외를 처리 See ProductCodes.java © 2004 Pearson Addison-Wesley. All rights reserved
10
ProductCodes.java © 2004 Pearson Addison-Wesley. All rights reserved
11
ProductCodes.java © 2004 Pearson Addison-Wesley. All rights reserved
12
실행결과 Enterproduct code (XXX to quit) : TRV2475A5R-15
Enterproduct code (XXX to quit) : TRD1704A7R-12 Enterproduct code (XXX to quit) : TRL2k74A5R-11 District is not numeric:TRL2k74A5R-11 Enterproduct code (XXX to quit) : TRQ2949A6M-04 Enterproduct code (XXX to quit) : TRV2105A2 Improper code length: TRV2105A2 Enterproduct code (XXX to quit) :TRQ2778A7R-19 Enterproduct code (XXX to quit) :XXX # of valid codes entered:4 # of banned codes entered: 2 code.charAt(9) => StringIndexOutOfBoundsException district = Integer.parseInt() => NumberFormatException © 2004 Pearson Addison-Wesley. All rights reserved
13
finally 절 finally 절(옵션) try { … } catch (E1 x) { … } …
catch (En x) { … } finally { … } finally절은 예외의 발생여부에 관계없이 실행되는 절이다. 예외가 발생되지 않은 경우 try 절이 종료된 후 실행된다. 예외가 발생된 경우에는 catch 절이 종료된 후에 실행된다. © 2004 Pearson Addison-Wesley. All rights reserved
14
예외 전파(Exception Propagation)
예외가 발생된 곳에서 처리되지 않으면 예외는 상위 레벨(그 메소드를 호출한 함수)로 전파된다. 예외가 catch되어 처리될 때까지, 또는 main( )에 도달할 때까지 전파된다. 상위 레벨에서 예외를 처리하기 예외를 발생시킨 메소드가 try블록 내부에서 호출되어야만 한다. try { method_call(..); } catch (E x ) { } See Propagation.java See ExceptionScope.java © 2004 Pearson Addison-Wesley. All rights reserved
15
예외 전파 © 2004 Pearson Addison-Wesley. All rights reserved
16
ExceptionScope.java (1/2)
© 2004 Pearson Addison-Wesley. All rights reserved
17
ExceptionScope.java (2/2)
© 2004 Pearson Addison-Wesley. All rights reserved
18
출력 Program beginning Level 1 beginning. Level 2 beginning.
The exception message is : / by zero The call stack trace: java.lang.ArithmeticException: / by zero at ExceptionScope.level3 (ExceptionScope.java:54) at ExceptionScope.level2 (ExceptionScope.java:41) at ExceptionScope.level1 (ExceptionScope.java:18) Level 1 ending. Program ending. * Level2 ending과 Level 3 ending은 출력되지 않는다. © 2004 Pearson Addison-Wesley. All rights reserved
19
Java에서 예외 선언 자바에서 예외 타입은 클래스로 선언 예외 선언 예외타입은 클래스이다
Exception 클래스나 서브클래스로부터 상속 받아 정의한다. 예외타입은 클래스이다 생성자, 멤버 필드, 메소드 등을 가질 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
20
예외 클래스 계층 구조 Object ….. Throwable Exception Error RuntimeException
ClassNotFoundException IllegalAcessException InstantiationException InterruptedException NoSuchMethodException ….. ArithmeticException NagativeArraySizeException ArrayIndexOutOfBoundsException SecurityException … © 2004 Pearson Addison-Wesley. All rights reserved
21
throw 문 예외 정의 예외 발생 See CreatingExceptions.java
Exceptioin 클래스를 확장(extend)해서 정의할 수 있다. 예외 발생 throw 문을 이용해서 발생시킬 수 있다. See CreatingExceptions.java See OutOfRangeException.java © 2004 Pearson Addison-Wesley. All rights reserved
22
CreatingExceptions.java © 2004 Pearson Addison-Wesley. All rights reserved
23
OutOfRangeException.java Enter an integer value between 25 and 40, inclusive : 69 Exception in thread “main” OutOfRangeException: Input value is out of range. at CreatingExceptions.main(CreaingExceptions.java:20) © 2004 Pearson Addison-Wesley. All rights reserved
24
검사예외(Checked Exceptions)
예외 구분 검사 예외(checked exception) 비검사 예외(unchecked exception) 검사예외 예외가 처리 혹은 throws 선언되었는지 컴파일러가 검사하여 처리되지 않았으면 오류 메시지를 낸다. 비검사예외 처리 혹은 선언되었는지 컴파일러가 검사하지 않는다. RuntimeException로부터 상속 받는 런타임 예외 © 2004 Pearson Addison-Wesley. All rights reserved
25
예외 명세 처리되지 않은 검사 예외를 메소드 이름 뒤에 명세 throws 절 이용 메소드_이름(…) throws A, B, C
{ . . . } © 2004 Pearson Addison-Wesley. All rights reserved
26
I/O 스트림 영역 스트림 I/O 스트림은 다음 두가지 종류 중의 하나이다.
원천(source)에서 목적지(destination)로 전달되는 바이트의 시퀀스를 말한다. I/O 스트림은 다음 두가지 종류 중의 하나이다. 바이트 자료를 다루는 바이트 스트림 텍스트 자료를 다루는 문자 스트림 I/O 스트림은 또는 다음 두 가지 중의 하나이다. source나 destination으로 동작하는 데이터 스트림 스트림 내부의 정보를 변경하거나 관리하는 프로세싱 스트림 © 2004 Pearson Addison-Wesley. All rights reserved
27
표준 I/O 표준 I/O 스트림의 세가지 종류 우리가 println 문장을 실행시키기 위해서는 System.out을 사용한다.
표준 입력 – System.in로 정의됨 : 키보드 입력 표준 출력 –System.out로 정의됨 : 특정 윈도우에 출력 표준 오류 –System.err로 정의됨 : 오류 메시지 출력 우리가 println 문장을 실행시키기 위해서는 System.out을 사용한다. © 2004 Pearson Addison-Wesley. All rights reserved
28
표준 입력 스트림 Keyboard 클래스를 사용하여 다음과 같이 입력 스트림을 선언한다 :
InputStreamReader isr = new InputStreamReader (System.in) BufferedReader stdin = new BufferedReader (isr); InputStreamReader 객체 바이트 스트림을 문자 스트림으로 변환한다. BufferedReader 객체 readLine 메소드를 사용하여 문장 단위로 입력을 받을 수 있게 해준다. © 2004 Pearson Addison-Wesley. All rights reserved
29
텍스트 파일 정보는 I/O스트림을 선언하고 사용하는 텍스트 파일로부터 입력되거나 출력된다. FileReader 클래스
문자 데이터를 포함하는 입력 파일을 표현하는 클래스이다. FileWriter 클래스 텍스트 출력 파일을 표현하는 클래스 이다. See TestData.java © 2004 Pearson Addison-Wesley. All rights reserved
30
TestData.java © 2004 Pearson Addison-Wesley. All rights reserved
31
실행결과 © 2004 Pearson Addison-Wesley. All rights reserved
32
도구 팁과 약어 도구 팁 약어(mnemonic) 콤포넌트의 setToolTipText메소드를 사용하여 지정할 수 있다.
JButton button = new JButton(“Compute”); button.setToolTipText(“Calculates the area under the curve”); 약어(mnemonic) 마우스 이외에 키보드를 사용하여 사용자가 버튼을 누르거나 메뉴에서 선택할 수 있도록 해주는 문자이다. © 2004 Pearson Addison-Wesley. All rights reserved
33
LightBulb.java © 2004 Pearson Addison-Wesley. All rights reserved
34
실행화면 © 2004 Pearson Addison-Wesley. All rights reserved
35
LightBulbPanel.java (1/2)
© 2004 Pearson Addison-Wesley. All rights reserved
36
LightBulbPanel.java (2/2)
© 2004 Pearson Addison-Wesley. All rights reserved
37
LightBulbControl.java 1/2
© 2004 Pearson Addison-Wesley. All rights reserved
38
LightBulbControl.java 2/2
© 2004 Pearson Addison-Wesley. All rights reserved
39
콤보 상자 콤보 상자(combo box) JukeBox 프로그램
사용자가 드롭다운 메뉴로부터 여러 옵션들 중 하나를 고르게 해준다. 편집가능(editable), 또는 편집불능(uneditable) 이 될 수 있다. JukeBox 프로그램 콤보 상자에서 연주할 노래를 고른 뒤 play버튼을 누르면 연주한다. JukeBox.java JukeBoxControls.java © 2004 Pearson Addison-Wesley. All rights reserved
40
Jukebox.java © 2004 Pearson Addison-Wesley. All rights reserved
41
JukeBoxControls.java(1/4)
© 2004 Pearson Addison-Wesley. All rights reserved
42
JukeBoxControls.java(2/4)
© 2004 Pearson Addison-Wesley. All rights reserved
43
JukeBoxControls.java(3/4)
© 2004 Pearson Addison-Wesley. All rights reserved
44
JukeBoxControls.java(4/4)
© 2004 Pearson Addison-Wesley. All rights reserved
45
실행화면 © 2004 Pearson Addison-Wesley. All rights reserved
46
스크롤 페인 scroll pane 컴포넌트의 제한된 모습을 보여주고 수직, 수평 스크롤바를 제공하는 컨테이너
이미지는 레이블에 붙여지고 이 레이블은 JScrollPane 구성자를 이용하여 스크롤 페인에 더해진다. © 2004 Pearson Addison-Wesley. All rights reserved
47
TransitMap.java © 2004 Pearson Addison-Wesley. All rights reserved
48
실행결과 © 2004 Pearson Addison-Wesley. All rights reserved
49
분할 페인 Split pane 이동 가능한 칸막이 막대(divide bar)에 의하여 분리된 두 개의 컴포넌트를 표시하는 컨테이너 JSplitPane클래스를 사용하여 분할 페인 생성 HORIZONTAL_SPLIT, VERTICAL_SPLIT JSplitPane(JSplitPane.HORIZONTAL_SPLIT, imageList, ImagePanel) JList 리스트의 선택항목이 바뀔 때마다 리스트 선택 이벤트(list selection event)가 발생된다. 리스트 선택 이벤트는 ListSectionListener 인터페이스를 구현하는 클래스의 valueChanged 메소드에 의하여 처리된다. © 2004 Pearson Addison-Wesley. All rights reserved
50
PickImage.java © 2004 Pearson Addison-Wesley. All rights reserved
51
Listpanel.java (1/2) © 2004 Pearson Addison-Wesley. All rights reserved
52
ListPanel.java (2/2) © 2004 Pearson Addison-Wesley. All rights reserved
53
실행결과 © 2004 Pearson Addison-Wesley. All rights reserved
54
요약 10장은 다음에 초점을 맞추고 있다: 예외의 목적 예외 메시지 try-catch 문 예외의 전파 예외 클래스 계층
GUI 약어와 도구 팁 추가 GUI 콤포넌트와 컨테이너 © 2004 Pearson Addison-Wesley. All rights reserved
Similar presentations