인터페이스.pptx
자바강의 -2015.03.18
■
학습목표
상속 : is a 관계 부모 확장이다.
*추상클래스 : 반드시 extends상속
*추상메서드 (추상화, 강제구현,
*문제점 : 하나의 부모만 가진다.
*container와 내 상속과 같이 상속하는 방법
1. 특정클래스를
만들고 통한 필터
2. Interface
3. 익명내부클래스(A$B
일반클래스의
재정의는 확장의 클래스 이걸 써도되고 안써도 되지만
추상클래스의
재정의는 무조건 재정의 된 것을 써야됨.
팩토리
메서드 패턴 : 숨겨야되는 코드는 부모에 둔다 자식은 확장시켜야되는 내용에게 위임을 시킨다.
추상클래스는
리소스를 가지고있다.
템플릿
메서드 패턴;
[팩토리
메서드 패턴(Factory Method Pattarn)]을 설명하자
이렇게
부모 클래스가 직접코드를 수정하지 않으면서
자식
클래스에서 어떤 Connection 객체를 생성 할 것인지를 결정하는 방법
즉
서브 클래스에서 구체적인 오브젝트 생성 방법을 결정 하는 것이
팩토리
메소드 패턴이라고 부른다 (Factory Method Pattatn)
* 팩토리
메서드 패턴은
상속을
통해 부모 클래스의 기능을 확장 할 때 사용 되는
가장
대표적인 방법이다.
변하지
않는 기능 : 부모 클래스에 만들어 둔다
자주
변경되며 확장할 기능 : 자식 클래스에서 만들어 둔다
--
팩토리 메서느패턴은
객체
지향 디자인 패턴이다. 팩토리메서드는 기반 클래스에
알려지지않은
구체클래스를 생성하는 패턴이며
파생클래스가
어떤 객체를 생성할지를 결정하도록하는
패턴이기도
하다. 기반 클래스 코드에 구체 클래스 이름을
감추기
위한 방법으롯 사용한다.
인터페이스
= 목록이다. 상수와 추상메서드를 갖고있고, 추상메서드를 꼭 구현 객체가 구현해야 하기 때문에 목록이다. 추상메서드를
갖지만 클래스가 아니다.(넌클래스) 그래서 클래스를 정의할수
없다.
추상클래스보다
추상화정도가 높다
차이점
몸통을 갖춘 일반 메서드나 멤버변수를 가질수 없다.
구성 - 상수와 추상 메서드
특징
인터페이스
이름은 대문자로 작성
다 public 으로 해야댐
인터페이스가
인터페이스를 구현할수 없음!
인터페이스는
결합도를 낮춘다.
final 상수
구현은
밑에 클래스가 할 수 있다.
상속과
구현을 동시에 할수있다.
상수만
정의
인터페이스의
구현은 implements 로 사용!
예제와 실행화면을 보면 조금 더 인터페이스에 대한 이해가 될 것이다.

CookInter.java 실행파일
|
Colored By Color Scripter™
1
2
3
4
5
|
package ex2;
public interface CookInter {
public Cook orderCook();
}
|
|
코드
실행 및 결과
|
Cook.java 실행파일
|
Colored By Color Scripter™
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
vpackage ex2;
/** Document : Cook
* Author : KOSTA / Created on : 2015. 3. 18, 오후 1:30:54
*/
public class Cook {
private String menu;
private boolean method;
public Cook(String menu,boolean method) {
//짜장면과 트루가 각각 들어가서 Setter개념으로 저장이된다.
this.menu = menu;
this.method = method;
}
public boolean isMethod() {
return method;
}
public String getMenu() {
return menu;
}
}
|
|
코드
실행 및 결과
|
ChinaCook.java
|
Colored By Color Scripter™
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package ex2;
/** Document : ChinaCook
* Author : KOSTA / Created on : 2015. 3. 18, 오후 1:38:48
*/
public class ChinaCook implements CookInter{
@Override
public Cook orderCook() {
//짜장면과 트루가 new가 붙었기 때문에 Cook이 힙에 생성되고 ,Cook안의 메서드로
//가보면
return new Cook("자장면", true);
}
}
|
|
코드
실행 및 결과
|
IndoCook.java 실행파일
|
Colored By Color Scripter™
1
2
3
4
5
6
7
8
9
10
11
12
|
package ex2;
/** Document : IndoCook
* Author : KOSTA / Created on : 2015. 3. 18, 오후 3:03:06
*/
public class IndoCook implements CookInter{
@Override
public Cook orderCook() {
return new Cook("커리", true);
}
}
|
|
코드
실행 및 결과
|
KorCook.java 실행파일
|
Colored By Color Scripter™
1
2
3
4
5
6
7
8
9
10
11
12
|
package ex2;
/** Document : KorCook
* Author : KOSTA / Created on : 2015. 3. 18, 오후 1:34:16
*/
public class KorCook implements CookInter{
@Override
public Cook orderCook() {
return new Cook("된장찌개", true);
}
}
|
|
코드
실행 및 결과
|
Customer.java 실행파일
|
Colored By Color Scripter™
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package ex2;
import java.util.Scanner;
/**
* Document : Customer Author : KOSTA / Created on : 2015. 3. 18, 오후 1:35:27
*/
public class Customer {
public void order(String menu) {
CookInter cok = new KorCook();
//Cooklnter를 참초하는 cok 객체 생성 초기화가 이루워짐
switch (menu) { //String 객체의 menu값의 답변에 따라 case로 옮겨짐
case "한식":
cok = new KorCook();
break;
case "중식":
cok = new ChinaCook();
break;
case "인도":
cok = new IndoCook();
break;
}
Cook cc = cok.orderCook();
//Cook클래스의 cok.orderCook을 호출 즉 중식이면
// ChinaCook클래스의 orderCook을 호출
if (cc.isMethod() == true) {
//isMethod의 트루가 들어가있으니 성립이 된다.
System.out.println(cc.getMenu() + "를 주문완료 했습니다");
}//이것을 끝으로 JVM은 종료가 된다.
}
public static void main(String[] args) { // JVM 시작
Scanner sc = new Scanner(System.in);// 스캐너 호출
System.out.print("메뉴");
String menu = sc.nextLine();
Customer c = new Customer();// 커스터머 객체 생성
c.order(menu);
//인자값menu 가 키보드 입력값이 됨 10~27 메서드로 옮겨짐
}
}
|
|
코드
실행 및 결과

|
