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
인터페이스의 개념과 사용방법에 관해 학습한다 .
인터페이스의 상속과 인터페이스를 통한 형변환을 학습한다 .
예외의 개념과 예외 관련 클래스를 학습한다 .
두 가지 예외 처리 방법에 관해 학습한다 .
학습목표
2
section 1 인터페이스의 개요와 인터페이스의 정의
section 2 인터페이스의 사용
section 3 인터페이스 상속
section 4 예외의 개요
section 5 예외 관련 클래스
section 6 예외 처리 - 6-1 메소드에서 예외 처리
- 6-2 호출한 메소드에 예외를 넘겨주는 방법
목차
3
9 장 . 인터페이스와 예외처리
1 인터페이스의 개요와 인터페이스의 정의
4
인터페이스 (interface)- 상수와 메소드 선언들의 집합
- 추상 클래스보다 더욱 완벽한 추상화를 제공
public interface 인터페이스이름 [extends 인터페이스이름 , .....] {..... 상수선언..... 메소드선언}
형식
public interface Sleeper { public long ONE_SECOND = 1000; public long ONE_MINUTE = 60000; public void wakeup();}
9 장 . 인터페이스와 예외처리
2 인터페이스의 사용
5
클래스에서 인터페이스를 사용하기 위해 implements 예약어를 사용
[public/final/abstract] class 클래스이름 extends 상위 클래스이름 implements 인터페이스
이름 [, 인터페이스이름 , .....]{… 멤버 변수선언… 생성자… 메소드선언... 인터페이스에 선언된 모든 메소드를 오버라이딩하여 구현하여야 한다 .}
형식
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 클래스는 두 개의인터페이스를 포함하고 있다
인터페이스에서 선언된 메소드는 모두오버라이딩하여 구현하여야 한다 .
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; }
인터페이스를 포함하는 클래스
두 개의 메소드를 가진 인터페이스
인터페이스에서 선언된메소드 오버라이딩
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);
인터페이스에서 선언된메소드 오버라이딩
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() + " "); }}
9 장 . 인터페이스와 예외처리
2 인터페이스의 사용
10
프로그램 설명- 00~00 : 스택을 구현하기 위한 인터페이스를 작성 . 이 인터페이스를 포함하는 모든
클래스는 반드시 두 개의 메소드 (push() 와 pop()) 를 구현하여야 한다 .
- 00~00 : 인터페이스를 포함하는 스택 클래스를 작성하였다 . 두 개의 메소드를 오버라이딩하여 구현하였다 . 스택은 정수의 배열로 구성하였다 .
- 00~00 : 10 개와 5 개의 요소를 가진 스택 ( 배열 ) 을 생성하였으며 , 각각의 스택에 정수를 저장하고 , 저장된 스택으로부터 pop() 메소드를 수행하여 출력하였다 .
9 장 . 인터페이스와 예외처리
3 인터페이스 상속
11
인터페이스 선언 시 필요에 따라 다른 인터페이스로부터 상속받을 수 있음
public interface 인터페이스이름 extends 인터페이스이름 [, 인터페이스이름 ,....] {.... 상수선언.... 메소드선언}
형식
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() { ....... 구현 }
인터페이스의 모든 메소드가 구현되어야 한다
인터페이스의 모든 메소드가 구현되어야 한다
인터페이스의 모든 메소드가 구현되어야 한다
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 으로 나눈다 . 예외 발생
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) 과 예외와 연관된 클래스
9 장 . 인터페이스와 예외처리
5 예외 관련 클래스
15
자바에서는 예외 즉 오류도 객체로 취급- 예외에 대하여 java.lang 패키지에 예외 관련 클래스를 제공
- 자바의 모든 예외 관련 클래스는 java.lang.Throwable 클래스의 하위 클래스로 제공
9 장 . 인터페이스와 예외처리
5 예외 관련 클래스
16
예외 클래스의 계층구조 ( 상속관계 )
290 page
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(); } }}
9 장 . 인터페이스와 예외처리
6 예외 처리
18
실행시키면 다음과 같은 오류를 발생
9 장 . 인터페이스와 예외처리
6-1 메소드에서 예외 처리6 예외 처리
19
메소드에서의 예외 처리
try { ...... // try 블록}catch( 예외타입 1 매개변수 1) { ..... // 예외 처리 블록 1}catch( 예외타입 2 매개변수 2) { ..... // 예외 처리 블록 2}........catch( 예외타입 N 매개변수 N) { ...... // 예외 처리 블록 N}finally { ...... // finally 블록}
형식
9 장 . 인터페이스와 예외처리
6-1 메소드에서 예외 처리6 예외 처리
20
발생되는 예외를 메소드 내에서 직접 처리하기 위한 구문- try 블록 : 조건 없이 실행되는 문장
- catch 블록은 try 블록 바로 다음에 위치
- finally 블록은 필요에 따라 선택적으로 사용
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 블록 지정
발생된 예외를 처리
9 장 . 인터페이스와 예외처리
6-1 메소드에서 예외 처리6 예외 처리
22
프로그램 설명- 01 : import 문은 클래스를 포함하는 부분으로 입출력 관련 패키지에 속하는 클래스를 포함하는
명령문이다 . 12 장에서 자세하게 설명한다 .
- 03~10 : 프로그램에서 예외가 발생할 가능성이 있는 부분을 try 블록으로 지정한다 .
- 11~14 : 예외가 발생할 경우 처리하는 문장이다 .
a.txt 파일 없이 실행
a.txt 파일에 “알기쉽게 해설한 자바를 사랑합니다”를 저장하고 실행
9 장 . 인터페이스와 예외처리
6-2 호출한 메소드에 예외를 넘겨주는 방법6 예외 처리
23
예외를 호출 메소드에 넘겨주는 방법
public void c() throws 예외클래스 [, 예외 클래스 , .....]형식
public static void main(String args[]) throws Exception {...........}
public void admin() throws FileNotFoundException {.......}
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 에 넘김
9 장 . 인터페이스와 예외처리
6-2 호출한 메소드에 예외를 넘겨주는 방법6 예외 처리
25
프로그램 설명- 03 : 일반적으로 main() 메소드는 JVM 에 의해 호출된다 . 이 프로그램은 main()
메소드에서 throws 절을 이용하여 Exception 예외를 넘기고 있다 . Exception 예외는 일반적인 예외 클래스들의 상위 클래스이다 . 이 예외를 지정하면 , 그 예외의 하위 클래스와 연관된 예외는 모두 처리할 수 있다 . 그 이유는 상위 클래스의 모든 요소들을 하위 클래스에서 모두 가지고 있기 때문이다 .
9 장 . 인터페이스와 예외처리
클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건
26
[Step1] JDK 라이브러리 문서를 다운받는다 .- java.sun.com 사이트에 오른쪽 다운로드 부분의 “ Java SE” 를 선택한다 .
- 두 번째 화면에서 아래쪽의 테이블에서 “ Java SE 6 Documentation” 항목의 오른쪽 다운로드 버튼을 선택한다 .
298 page
9 장 . 인터페이스와 예외처리
클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건
27
- 다음 화면에서 라이선스 동의를 구하는 부분을 선택하면 그다음 화면에서 압축된 문서 파일을 다운받을 수 있다 .
299 page
9 장 . 인터페이스와 예외처리
클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건
28
- 다운받은 파일을 적당한 곳에 압축을 풀어 사용한다 . 압축을 풀면 7 개의 디렉터리와 하나의 파일이 나타난다 .
9 장 . 인터페이스와 예외처리
클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건
29
[Step2] JDK 라이브러리의 사용을 위한 참조- 특정 라이브러리 클래스를 사용하기 위해서는 클래스 이름과 패키지 이름을 가지고
검색해야 한다 . 우선 설치된 디렉터리 중에서 api 디렉터리에 있는 index.html 파일을 웹검색기로 실행시킨다 .
300 page
9 장 . 인터페이스와 예외처리
클래스 라이브러리 사용자바 프로그래머가 되기 위한 필수조건
30
- 검색기의 왼쪽 아래 창에는 모든 클래스들이 알파벳 순으로 나열되어 있다 . 오른쪽 창에는 패키지별로 클래스를 찾을 수 있도록 제공하고 있다 .
- 원하는 클래스를 찾아 생성자와 메소드를 탐색하여 클래스를 사용한다 . 각 클래스에서 제공되는 생성자와 인터페이스 , 메소드 등에 관한 자세한 사용방법이 제공되고 있다 .
인터페이스의 개요와 인터페이스 정의 ① 인터페이스는 상수와 메소드 선언들의 집합이다 .
② 인터페이스는 추상 메소드와 상수만으로 구성된 추상 클래스라 할 수 있다 .
③ 인터페이스의 개념을 이용하여 다중 상속의 개념을 구현할 수 있다 .
인터페이스의 사용과 상속 ① 인터페이스를 포함하려면 implements 예약어를 사용한다 .
② 인터페이스에 선언된 모든 메소드는 오버라이딩하여 구현하여야 한다 .
③ 클래스와는 달리 다수 개의 인터페이스를 지정할 수 있다 .
④ 인터페이스들은 상속된 계층구조를 이룰 수 있으며 , 상속된 인터페이스를 포함하는 클래스는 관련된 모든 메소드를 오버라이딩해야 한다 .
학습정리
31
예외의 개요 ① 예외란 프로그램 실행 중에 발생하는 예기치 않은 사건을 말한다 .
② JVM 은 프로그램 실행 중 예외가 발생하면 , 관련된 예외 클래스로부터 객체를 생성하여 예외를
발생시킨 메소드에 전달한다 .
예외 관련 클래스 ① 자바는 약 50 여 개의 예외 관련 클래스를 제공하고 있다 .
② RuntimeException 클래스와 Error 클래스와 연관된 ( 하위 클래스 포함 ) 예외는
프로그램에서 처리하지 않는다 . 프로그램 처리에 드는 시간과 비용이 크기 때문이다 .
③ 자바는 RuntimeException 클래스와 Error 클래스가 아닌 예외들은 명시적인 예외 처리를
요구한다 .
예외 처리 ① 자바는 2 가지 예외 처리 방법을 제공한다 .
② 한 가지 방법은 try-catch 절을 이용하여 예외가 발생하면 , 발생한 메소드 내에서 예외를
처리하는 방법이며 , 다른 방법은 발생된 예외를 호출한 메소드에 넘겨주는 방법이다 .
학습정리
32
9 장 . 인터페이스와 예외처리
33
수고하셨습니다 .질문 있습니까 ?