-
- 해당 코드를 참조만 하시고, 복사 붙여넣기를 통한 과제를 진행하시면 도움이 정말 하나도 안됩니다. 부디 직접해보시고, 다른 사람의 솔루션이 어떤 지 참조하시는 정도로만 사용해주세요.
시나리오
고객센터에는 전화 상담원들이 있습니다. 고객센터로 전화가 오면 대기열에 저장됩니다.
상담원이 지정되기 전까지 대기상태가 됩니다.
각 전화를 상담원에게 배분하는 정책은 다음과 같이 구현할 수 있습니다.
1. 순서대로 배분하기 : 모든 상담원이 동일하 상담건수를 처리하도록 들어오는 전화 순서대로 상담원에게 하나씩 배분합니다.
2. 짧은 대기열 찾아 배분하기 : 고객 대기 시간을 줄이기 위해 상담을 하지 않는 상담원이나 가장 짧은 대기열을 보유한 상담원에게 배분합니다.
3. 우선 순위에 따라 배분하기 : 고객 등급에 따라 등급이 높은 고객의 전화를 우선 가져와서 업무 능력이 좋은 상담원에게 우선 배분 합니다.
SchedulerTest.java
package java0805; 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 : 우선순위가 높은 고객 먼저 할당 "); 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(); } }
Scheduler.Java
package java0805; public interface Scheduler { public void getNextCall(); public void sendCallToAgent(); }
RoundRobin.java
package java0805; public class RoundRobin implements Scheduler{ public void getNextCall() { System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다"); } public void sendCallToAgent() { System.out.println("다음 순서 상담원에게 배분합니다."); } }
PriorityAllocation.java
package java0805; public class PriorityAllocation implements Scheduler { public void getNextCall() { System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다"); } public void sendCallToAgent() { System.out.println("높은 등급의 고객의 전화를 업무 능력이 좋은 상담원에게 연결합니다."); } }
LeastJob.java
package java0805; public class LeastJob implements Scheduler{ public void getNextCall() { System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다"); } public void sendCallToAgent() { System.out.println("현재 상담업무가 없거나 상담대기가 가장작은 상담원에게 할당합니다."); } }
추가 시나리오
상담 정책을 추가해 봅니다.
상담 전화를 할당하는 방식이 아닌 상담원이 본인이 필요할 때 가져오는 AgentGetCall 클래스를 추가로 만듭니다.
추가된 정책에서 getNextCall()이 호출되면 ‘상담원이 다음 전화 요청’이라고 출력합니다.
sendCallToAgent() 가 호출되면 ‘상담원이 전화 상담을 가져갔습니다’라고 출력합니다.
추가된 정책은 SchedulerTest가 실행될 때 A 또는 a 를 입력하면 선택됩니다.
AgentGetCall 클래스가 Scheduler 인터페이스를 구현하고,
이를 SchedulerTest에서 생성하여 테스트해보세요.
SchedulerTest.java
package java0805; 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.out.println("A : 전화 상담을 원하는 상담원에게 할당 "); System.out.println("****************************** "); 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 if(ch == 'A' || ch == 'a'){ scheduler = new AgentGetCall(); } else { System.out.println("지원되지 않는 기능입니다."); return; } scheduler.getNextCall(); scheduler.sendCallToAgent(); } }
AgentGetCall.java
package java0805; public class AgentGetCall implements Scheduler{ public void getNextCall() { System.out.println("상담원이 다음 전화를 요청합니다."); } public void sendCallToAgent() { System.out.println("상담원이 전화 상담을 가져갔습니다."); } }
출력 결과
'실습코드 > 실습 코드' 카테고리의 다른 글
JAVA_ArrayList 특정 위치에 변수 추가. (객체지향 프로그래밍) (0) 2021.08.06 JAVA_객체지향프로그래밍, 인터페이스 예제 (정렬 예제) (0) 2021.08.05 JAVA_객체지향프로그래밍, 템플릿 메서드 응용 (게임 레벨) (0) 2021.08.04 JAVA_ 추상클래스를 통해 연결된 클래스 생성 (추상클래스, abstract) (0) 2021.08.04 JAVA_고객 정보 맞춤 서비스 프로그램 (JAVA 상속, super(), 구현부 추가) (0) 2021.08.03 댓글 (비로그인 댓글 허용하지 않습니다.)