Scheduler.java
package scheduler;
//Scheduler인터페이스를 만들어서 두개의 메서드를 선언
public interface Scheduler {
public void getNextCall();
public void sendCallToAgent();
}
RoundRobin.java
package scheduler;
//Scheduler인터페이스를 불러와서 RoundRobin클래스 구현
public class RoundRobin implements Scheduler{
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("다음 순서의 상담원에게 배분합니다.");
}
}
LeastJob.java
package scheduler;
//Scheduler인터페이스를 불러와서 LeastJob클래스 구현
public class LeastJob implements Scheduler{
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담업무가 없거나 상담대기가 가장 적은 상담원에게 할당합니다.");
}
}
PriorityAllocation.java
package scheduler;
//Scheduler인터페이스를 불러와서 PriorityAllocation클래스 구현
public class PriorityAllocation implements Scheduler{
@Override
public void getNextCall() {
System.out.println("고객 등급이 높은 고객의 call을 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 숙련도가 높은 상담원에게 먼저 배분합니다.");
}
}
SchedulerTest.java
package scheduler;
import java.io.IOException;
public class SchedulerTest {
public static void main(String[] args) throws IOException {
System.out.println("전화 상담원 할당 방식을 선택하세요.");
System.out.println("R : 한명씩 차례대로");
System.out.println("L : 대기가 적은 상담사 우선");
System.out.println("P : 우선순위가 높은 고객우선 숙련도 높은 상담원");
//System.in.read(); : 콘솔창에서 사용자로부터 값을 입력받는 함수
//정수형을 입력받아서 ch변수로 출력
int ch=System.in.read();
Scheduler scheduler=null;
if(ch == 'R' || ch=='r') {
scheduler=new RoundRobin();
}
else if(ch == 'L' || ch=='l') {
scheduler=new LeastJob();
}else if(ch == 'P' || ch=='p') {
scheduler=new PriorityAllocation();
}else {
System.out.println("지원되지 않는 기능입니다");
return;
}
scheduler.getNextCall();
scheduler.sendCallToAgent();
}
}
인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스를 구현 할 수 있음
디폴트 메서드의 이름이 중복되는 경우에는 재정의함
인터페이스 간에도 상속이 가능함
구현이 없으므로 extends 뒤에 여러 인터페이스를 상속받을 수 있음
구현 내용이 없으므로 타입 상속(type inheritance)라고 함
X.java
package interfaceex;
public interface X {
void x();
}
Y.java
package interfaceex;
public interface Y {
void y();
}
MyInterface.java
package interfaceex;
//인터페이스간에도 상속이 가능함
public interface MyInterface extends X,Y{
void myMethod();
}
MyClass.java
package interfaceex;
//인터페이스간에도 상속이 가능함
public class MyClass implements MyInterface{
@Override
public void x() {
// TODO Auto-generated method stub
}
@Override
public void y() {
// TODO Auto-generated method stub
}
@Override
public void myMethod() {
// TODO Auto-generated method stub
}
}
Shelf.java
package bookshelf;
import java.util.ArrayList;
public class Shelf {
//상속받을때 사용할 수 있는 protected 접근제어자 선언
protected ArrayList<String> shelf;
public Shelf() {
shelf=new ArrayList<String>();
}
public ArrayList<String> getShelf() {
return shelf;
}
public int getCount() {
return shelf.size();
}
}
Queue.java
package bookshelf;
public interface Queue {
void enQueue(String title);
String deQueue();
int getSize();
}
BookShelf.java
package bookshelf;
//Shelf클래스 상속받아옴, Queue인터페이스 정의
public class BookShelf extends Shelf implements Queue{
@Override
public void enQueue(String title) {
shelf.add(title);
}
@Override
public String deQueue() {
//remove명령어를 이용해 맨앞에 있는 선반 반환
return shelf.remove(0);
}
@Override
public int getSize() {
//Shelf클래스의 getCount메서드 반환
return getCount();
}
}
BookShelfTest.java
package bookshelf;
public class BookShelfTest {
public static void main(String[] args) {
Queue bookQueue = new BookShelf();
bookQueue.enQueue("태백산맥1");
bookQueue.enQueue("태백산맥2");
bookQueue.enQueue("태백산맥3");
//queue방식대로 들어간순서대로 먼저꺼내짐 (first-in-out)
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
}
}