반응형
인터페이스는 "Client Code"와 서비스를 제공하는 "객체" 사이의 약속이다.
어떤 객체가 어떤 interface 타입이라고 하는 것은 그 interface가 제공하는 메서드를 구현했다는 의미를 가진다.
Cilent는 어떻게 구현되었는지 상관없이 interface의 정의만을 보고 사용할 수 있다.
[예시]
JDBC(Java DataBase Connectivity) - 자바에서 데이터베이스에 접근할 수 있도록 하는 자바 API이다.
다양한 구현이 필요한 인터페이스를 설계하는 일은 매우 중요하다.
인터페이스의 사용법
UserInfoWeb은 IUserInfoDao에 정의된 메서드 명세만 보고 Dao를 사용할 수 있고
Dao 클래스들은 IUserInfoDao에 정의된 메서드를 구현할 책임이 있다.
실습 - 고객상담 전화 배분 프로그램
[요구사항 정의 - 뱅커스 알고리즘]
[구조도]
[인터페이스와 클래스 설계]
[Scheduler 인터페이스 정의]
package schedulerTest;
public interface Scheduler {
//추상 메서드 선언
public void getNextCall();
public void sendCallToAgent();
}
[순서대로 배분하기 클래스 정의]
public class RoundRobin implements Scheduler {
@Override
public void getNextCall() {
// TODO Auto-generated method stub
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
// TODO Auto-generated method stub
System.out.println("다음 순서 상담에게 배분합니다.");
}
}
[짧은 대기열 먼저 배분하기 클래스 정의]
public class LeastJob implements Scheduler{
@Override
public void getNextCall() {
// TODO Auto-generated method stub
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
// TODO Auto-generated method stub
System.out.println("현재 상담 업무가 없거나 대기가 가장 적은 상담원에게 할당합니다.");
}
}
[우선순위에 따라 배분하기 클래스 정의]
public class PriorityAllcation implements Scheduler {
@Override
public void getNextCall() {
// TODO Auto-generated method stub
System.out.println("고객 등급이 높은 고객의 전화를 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
// TODO Auto-generated method stub
System.out.println("업무 능력이 높은 상담원에게 우선적으로 배분합니다.");
}
}
[입력문자에 따라 배분 정책을 수행하는 클래스 구현]
import java.io.IOException;
public class SchedulerTest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//출력문을 호출
System.out.println("전화 상담 할방 방식을 선택하시오.");
System.out.println("R : 한명씩 차례로 할당합니다.");
System.out.println("L : 쉬고 있거나 대기열이 가장 적은 상담원에게 할당합니다.");
System.out.println("P : 우선 순위가 가장 높은고객 먼저 할당합니다.");
//할당 방식을 입력받아 ch 변수에 대입
int ch = System.in.read();//문자 한글자 한글자 읽어오기
Scheduler scheduler = null;
if(ch == 'R' || ch == 'r'){//입력받은 값이 R또는 r이면 RoundRobin클래스를 생성
scheduler = new RoundRobin();
}else if(ch == 'L' || ch =='l'){//입력받은 값이 L또는 l 이면 LeastJob 클래스를 생성
scheduler = new LeastJob();
}else if(ch == 'P' || ch == 'p'){//입력받은 값이 P또는 p 이면 PriorityAllcation 클래스를 생성
scheduler = new PriorityAllcation();
}else {
System.out.println("지원되지 않는 기능입니다.");
return;
}
//어떤 정책인가와 상관없이 인터페이스 선언한 메서드를 호출
scheduler.getNextCall();
scheduler.sendCallToAgent();
}
}
반응형
'Language > JAVA' 카테고리의 다른 글
[JAVA]Object 클래스 (0) | 2020.07.01 |
---|---|
[JAVA] 인터페이스 상속 (0) | 2020.06.29 |
[JAVA]인터페이스(interface) 구현과 형변환 (0) | 2020.06.29 |
[JAVA] 상속 관계(IS - A 관계, HAS - A 관계) (0) | 2020.06.23 |
[JAVA]다형성(Polymorphism) (0) | 2020.06.23 |
댓글