Do It Java Day22
인터페이스2
1. 인터페이스와 다형성
- 인터페이스는 ‘Client Code’와 서비스를 제공하는 ‘객체’ 사이의 약속이다
- ‘A 객체가 B 인터페이스 타입이다’ => A 객체가 B 인터페이스의 메서드를 구현했다는 의미
-
Client는 어떻게 구현되었는지 상관없이 interface의 정의만을 보고 사용할 수 있다(ex: JDBC)
- 예시
public interface Scheduler {
void getNextCall();
void sendCallToAgent();
}
public class RoundRobin implements Scheduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("다음 순서 상담원에게 배분합니다.");
}
}
public class ListJob implements Scheduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담 업무가 없거나 상담대기가 가장 적은 상담원에게 할당합니다.");
}
}
public class PriorityAllocation implements Scheduler {
@Override
public void getNextCall() {
System.out.println("등급이 높은 고객의 전화를 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 스킬이 가장 높은 상담원의 대기열 제일 앞에 배분합니다.");
}
}
import java.io.IOException;
public class SchedulerTest {
public static void main(String[] args) throws IOException {
// R, L, P
System.out.println("전화상담 배분방식을 선택하세요");
System.out.println("R, L, P");
int ch = System.in.read();
Scheduler scheduler = null;
if(ch == 'R' || ch == 'r') {
scheduler = new RoundRobin();
} else if (ch == 'L' || ch == 'l') {
scheduler = new ListJob();
} else if (ch == 'P' || ch == 'p') {
scheduler = new PriorityAllocation();
} else {
System.out.println("지원하지 않는 기능입니다.");
return;
}
scheduler.getNextCall();
scheduler.sendCallToAgent();
}
}