33
9장. 장장장장장장 장장장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

9 장 . 인터페이스와 예외처리

  • Upload
    gisela

  • View
    177

  • Download
    0

Embed Size (px)

DESCRIPTION

9 장 . 인터페이스와 예외처리. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); } - PowerPoint PPT Presentation

Citation preview

Page 1: 9 장 .  인터페이스와 예외처리

9장 . 인터페이스와예외처리

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 9 장 .  인터페이스와 예외처리

인터페이스의 개념과 사용방법에 관해 학습한다 .

인터페이스의 상속과 인터페이스를 통한 형변환을 학습한다 .

예외의 개념과 예외 관련 클래스를 학습한다 .

두 가지 예외 처리 방법에 관해 학습한다 .

학습목표

2

Page 3: 9 장 .  인터페이스와 예외처리

section 1 인터페이스의 개요와 인터페이스의 정의

section 2 인터페이스의 사용

section 3 인터페이스 상속

section 4 예외의 개요

section 5 예외 관련 클래스

section 6 예외 처리 - 6-1 메소드에서 예외 처리

- 6-2 호출한 메소드에 예외를 넘겨주는 방법

목차

3

Page 4: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

1 인터페이스의 개요와 인터페이스의 정의

4

인터페이스 (interface)- 상수와 메소드 선언들의 집합

- 추상 클래스보다 더욱 완벽한 추상화를 제공

public interface 인터페이스이름 [extends 인터페이스이름 , .....] {..... 상수선언..... 메소드선언}

형식

public interface Sleeper { public long ONE_SECOND = 1000; public long ONE_MINUTE = 60000; public void wakeup();}

Page 5: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

2 인터페이스의 사용

5

클래스에서 인터페이스를 사용하기 위해 implements 예약어를 사용

[public/final/abstract] class 클래스이름 extends 상위 클래스이름 implements 인터페이스

이름 [, 인터페이스이름 , .....]{… 멤버 변수선언… 생성자… 메소드선언... 인터페이스에 선언된 모든 메소드를 오버라이딩하여 구현하여야 한다 .}

형식

Page 6: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

2 인터페이스의 사용

6

클래스에서 인터페이스를 사용하기 위해 implements 예약어를 사용

public interface Sleeper { public long ONE_SECOND = 1000; public long ONE_MINUTE = 60000; public void wakeup();}public interface Worker { public long WORK_TIME = 8; public void sleep();}public class Man implements Sleeper, Worker { public void wakeup() { System.out.println(" 빨리 일어나 !!"); } public void sleep() { System.out.println(" 빨리 자 !!"); .......... }}

Man 클래스는 두 개의인터페이스를 포함하고 있다

인터페이스에서 선언된 메소드는 모두오버라이딩하여 구현하여야 한다 .

Page 7: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

2 인터페이스의 사용

7

실습예제InterfaceTest1.java

0102030405060708091011121314151617

interface IStack { void push(int item); int pop();}class FixedStack implements IStack { private int stack[]; private int tos; FixedStack(int size) { stack = new int[size]; tos = -1; } public void push(int item) { if(tos==stack.length-1)

System.out.println(" 스택이 꽉찼음 ");

else stack[++tos] = item; }

인터페이스를 포함하는 클래스

두 개의 메소드를 가진 인터페이스

인터페이스에서 선언된메소드 오버라이딩

Page 8: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

2 인터페이스의 사용

8

실습예제InterfaceTest1.java

1819202122232425262728293031323334

public int pop() { if(tos < 0) {

System.out.println(" 스택이 비었음 ");

return 0; } else return stack[tos--]; }}public class InterfaceTest1 { public static void main(String args[]) { FixedStack mystack1 = new FixedStack(10); FixedStack mystack2 = new FixedStack(5); for(int i=0 ; i<10 ; i++) mystack1.push(i); for(int i=0 ; i<5 ; i++) mystack2.push(i);

인터페이스에서 선언된메소드 오버라이딩

Page 9: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

2 인터페이스의 사용

9

실습예제InterfaceTest1.java

353637383940414243

System.out.println(" 스택 : mystack1");

for(int i=0 ; i<10 ; i++) System.out.print(mystack1.pop() + " "); System.out.println();

System.out.println(" 스택 : mystack2");

for(int i=0 ; i<5 ; i++) System.out.print(mystack2.pop() + " "); }}

Page 10: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

2 인터페이스의 사용

10

프로그램 설명- 00~00 : 스택을 구현하기 위한 인터페이스를 작성 . 이 인터페이스를 포함하는 모든

클래스는 반드시 두 개의 메소드 (push() 와 pop()) 를 구현하여야 한다 .

- 00~00 : 인터페이스를 포함하는 스택 클래스를 작성하였다 . 두 개의 메소드를 오버라이딩하여 구현하였다 . 스택은 정수의 배열로 구성하였다 .

- 00~00 : 10 개와 5 개의 요소를 가진 스택 ( 배열 ) 을 생성하였으며 , 각각의 스택에 정수를 저장하고 , 저장된 스택으로부터 pop() 메소드를 수행하여 출력하였다 .

Page 11: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

3 인터페이스 상속

11

인터페이스 선언 시 필요에 따라 다른 인터페이스로부터 상속받을 수 있음

public interface 인터페이스이름 extends 인터페이스이름 [, 인터페이스이름 ,....] {.... 상수선언.... 메소드선언}

형식

Page 12: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

3 인터페이스 상속

12

인터페이스 선언 시 필요에 따라 다른 인터페이스로부터 상속받을 수 있음public interface Sleeper { public long ONE_SECOND = 1000; public long ONE_MINUTE = 60000; public void wakeup();}public interface Worker { public long WORK_TIME = 8; public void sleep();}public interface People extends Sleeper, Worker { public int MAX = 24; public int MIN = 0; public void work();}

public InterfaceClass implements People { ........... public void wakeup() { ....... 구현 } public void sleep() { ....... 구현 } public void worker() { ....... 구현 }

인터페이스의 모든 메소드가 구현되어야 한다

인터페이스의 모든 메소드가 구현되어야 한다

인터페이스의 모든 메소드가 구현되어야 한다

Page 13: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

4 예외의 개요

13

예외- 프로그램 실행 중에 발생하는 예기치 않은 사건

class Error { public static void main(String[] args) { x(); } static void x() { y(); } static void y() { z(); } static void z() { int i = 1; int j = 0; System.out.println(i/j); }}

x() 메소드 호출

y() 메소드 호출

z() 메소드 호출

1 을 0 으로 나눈다 . 예외 발생

Page 14: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

4 예외의 개요

14

JVM 의 묵시적인 예외 처리기- 예외가 발생하면 예외 객체를 생성

- 예외가 발생된 메소드에서 Error 를 출력

- 메소드를 호출한 메소드에 예외를 반환

java.lang.ArithmeticException: / by zero at Error.z(Error.java:14)at Error.y(Error.java:9)at Error.x(Error.java:6)at Error.main(Error.java:3)

예외가 발생한 원인 (by zero) 과 예외와 연관된 클래스

Page 15: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

5 예외 관련 클래스

15

자바에서는 예외 즉 오류도 객체로 취급- 예외에 대하여 java.lang 패키지에 예외 관련 클래스를 제공

- 자바의 모든 예외 관련 클래스는 java.lang.Throwable 클래스의 하위 클래스로 제공

Page 16: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

5 예외 관련 클래스

16

예외 클래스의 계층구조 ( 상속관계 )

290 page

Page 17: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6 예외 처리

17

입출력을 수행하는 프로그램

import java.io.*; public class IOExceptionError { public static void main(String args[]) { FileReader file = new FileReader("a.txt"); int i; while((i = file.read()) != -1) { System.out.print((char)i); } file.close(); } }}

Page 18: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6 예외 처리

18

실행시키면 다음과 같은 오류를 발생

Page 19: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-1 메소드에서 예외 처리6 예외 처리

19

메소드에서의 예외 처리

try { ...... // try 블록}catch( 예외타입 1 매개변수 1) { ..... // 예외 처리 블록 1}catch( 예외타입 2 매개변수 2) { ..... // 예외 처리 블록 2}........catch( 예외타입 N 매개변수 N) { ...... // 예외 처리 블록 N}finally { ...... // finally 블록}

형식

Page 20: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-1 메소드에서 예외 처리6 예외 처리

20

발생되는 예외를 메소드 내에서 직접 처리하기 위한 구문- try 블록 : 조건 없이 실행되는 문장

- catch 블록은 try 블록 바로 다음에 위치

- finally 블록은 필요에 따라 선택적으로 사용

Page 21: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-1 메소드에서 예외 처리6 예외 처리

21

실습예제ExceptionTest1.java

01020304050607080910111213141516

import java.io.*;public class ExceptionTest1 { public static void main(String args[]) { try { FileReader fle = new FileReader("a.txt"); int i; while((i = fle.read()) != -1) System.out.print((char)i); fle.close(); } catch(Exception e) {

System.out.println(" 예외 처리 루틴 : " + e +

" 파일이 존재하지 않는다 .");

} }}

입출력 패키지를 포함하는 문장 (11 장 설명 )

try 블록 지정

발생된 예외를 처리

Page 22: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-1 메소드에서 예외 처리6 예외 처리

22

프로그램 설명- 01 : import 문은 클래스를 포함하는 부분으로 입출력 관련 패키지에 속하는 클래스를 포함하는

명령문이다 . 12 장에서 자세하게 설명한다 .

- 03~10 : 프로그램에서 예외가 발생할 가능성이 있는 부분을 try 블록으로 지정한다 .

- 11~14 : 예외가 발생할 경우 처리하는 문장이다 .

a.txt 파일 없이 실행

a.txt 파일에 “알기쉽게 해설한 자바를 사랑합니다”를 저장하고 실행

Page 23: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-2 호출한 메소드에 예외를 넘겨주는 방법6 예외 처리

23

예외를 호출 메소드에 넘겨주는 방법

public void c() throws 예외클래스 [, 예외 클래스 , .....]형식

public static void main(String args[]) throws Exception {...........}

public void admin() throws FileNotFoundException {.......}

Page 24: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-2 호출한 메소드에 예외를 넘겨주는 방법6 예외 처리

24

실습예제ExceptionTest2.java

01020304050607080910

import java.io.*;public class ExceptionTest2 { public static void main(String args[]) throws Exception { FileReader fle = new FileReader("a.txt"); int i; while((i = fle.read()) != -1) System.out.print((char)i); fle.close(); }}

throws() 절을 이용하여예외를 JVM 에 넘김

Page 25: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

6-2 호출한 메소드에 예외를 넘겨주는 방법6 예외 처리

25

프로그램 설명- 03 : 일반적으로 main() 메소드는 JVM 에 의해 호출된다 . 이 프로그램은 main()

메소드에서 throws 절을 이용하여 Exception 예외를 넘기고 있다 . Exception 예외는 일반적인 예외 클래스들의 상위 클래스이다 . 이 예외를 지정하면 , 그 예외의 하위 클래스와 연관된 예외는 모두 처리할 수 있다 . 그 이유는 상위 클래스의 모든 요소들을 하위 클래스에서 모두 가지고 있기 때문이다 .

Page 26: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건

26

[Step1] JDK 라이브러리 문서를 다운받는다 .- java.sun.com 사이트에 오른쪽 다운로드 부분의 “ Java SE” 를 선택한다 .

- 두 번째 화면에서 아래쪽의 테이블에서 “ Java SE 6 Documentation” 항목의 오른쪽 다운로드 버튼을 선택한다 .

298 page

Page 27: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건

27

- 다음 화면에서 라이선스 동의를 구하는 부분을 선택하면 그다음 화면에서 압축된 문서 파일을 다운받을 수 있다 .

299 page

Page 28: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건

28

- 다운받은 파일을 적당한 곳에 압축을 풀어 사용한다 . 압축을 풀면 7 개의 디렉터리와 하나의 파일이 나타난다 .

Page 29: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건

29

[Step2] JDK 라이브러리의 사용을 위한 참조- 특정 라이브러리 클래스를 사용하기 위해서는 클래스 이름과 패키지 이름을 가지고

검색해야 한다 . 우선 설치된 디렉터리 중에서 api 디렉터리에 있는 index.html 파일을 웹검색기로 실행시킨다 .

300 page

Page 30: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건

30

- 검색기의 왼쪽 아래 창에는 모든 클래스들이 알파벳 순으로 나열되어 있다 . 오른쪽 창에는 패키지별로 클래스를 찾을 수 있도록 제공하고 있다 .

- 원하는 클래스를 찾아 생성자와 메소드를 탐색하여 클래스를 사용한다 . 각 클래스에서 제공되는 생성자와 인터페이스 , 메소드 등에 관한 자세한 사용방법이 제공되고 있다 .

Page 31: 9 장 .  인터페이스와 예외처리

인터페이스의 개요와 인터페이스 정의 ① 인터페이스는 상수와 메소드 선언들의 집합이다 .

② 인터페이스는 추상 메소드와 상수만으로 구성된 추상 클래스라 할 수 있다 .

③ 인터페이스의 개념을 이용하여 다중 상속의 개념을 구현할 수 있다 .

인터페이스의 사용과 상속 ① 인터페이스를 포함하려면 implements 예약어를 사용한다 .

② 인터페이스에 선언된 모든 메소드는 오버라이딩하여 구현하여야 한다 .

③ 클래스와는 달리 다수 개의 인터페이스를 지정할 수 있다 .

④ 인터페이스들은 상속된 계층구조를 이룰 수 있으며 , 상속된 인터페이스를 포함하는 클래스는 관련된 모든 메소드를 오버라이딩해야 한다 .

학습정리

31

Page 32: 9 장 .  인터페이스와 예외처리

예외의 개요 ① 예외란 프로그램 실행 중에 발생하는 예기치 않은 사건을 말한다 .

② JVM 은 프로그램 실행 중 예외가 발생하면 , 관련된 예외 클래스로부터 객체를 생성하여 예외를

발생시킨 메소드에 전달한다 .

예외 관련 클래스 ① 자바는 약 50 여 개의 예외 관련 클래스를 제공하고 있다 .

② RuntimeException 클래스와 Error 클래스와 연관된 ( 하위 클래스 포함 ) 예외는

프로그램에서 처리하지 않는다 . 프로그램 처리에 드는 시간과 비용이 크기 때문이다 .

③ 자바는 RuntimeException 클래스와 Error 클래스가 아닌 예외들은 명시적인 예외 처리를

요구한다 .

예외 처리 ① 자바는 2 가지 예외 처리 방법을 제공한다 .

② 한 가지 방법은 try-catch 절을 이용하여 예외가 발생하면 , 발생한 메소드 내에서 예외를

처리하는 방법이며 , 다른 방법은 발생된 예외를 호출한 메소드에 넘겨주는 방법이다 .

학습정리

32

Page 33: 9 장 .  인터페이스와 예외처리

9 장 . 인터페이스와 예외처리

33

수고하셨습니다 .질문 있습니까 ?