문제
직원들의 업무효율을 높이기 위한 프로그램 작성
일이 생기면 대기열에 저장되고 각 직원에게 배분이 됩니다.
배분이 되는 정책은 크게 세 가지가 있습니다.
모든 직원이 동일한 업무개수를 처리하도록 직원 순서대로 배분합니다.
쉬고 있거나 직원에게 할당된 업무의 수가 가장 적은 직원에게 배분합니다.
업무 등급에 따라 등급이 높은 업무는 업무능력이 우수한 직원에게 배분합니다.
세 가지 정책은 필요에 따라 바뀌어 운영될 수 있습니다. (RoundRobin, LeastJob, PriorityAllocation은 Scheduler와 상속 관계이며,
Schduler는 getNextJob(), sendJobToCoworker() 메서드를 가진다.)
테스트 프로그램은 다음과 같다.
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.getNextJob();
scheduler.SendJobtoCoworker();
}
}
1. Schoduler Interface 만들기
- 클래스에 계속 사용되어야 할 메서드를 만들어야 하므로 인터페이스로 생성한다.
public interface Scheduler {
void getNextJob();
void SendJobtoCoworker();
}
2. 각각의 클래스 만들기
- Scheduler와 상속관계인 RoundRobin, LeastJob, PriorityAllocation 클래스들을 만들어 준다. SchedulerTest의 코드에는 다른 생성자들과 메서드들이 없으므로 Scheduler 인터페이스를 상속 받아 그대로 사용한다.
RoundRobin
public class RoundRobin implements Scheduler {
@Override
public void getNextJob() {
System.out.println("업무를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void SendJobtoCoworker() {
System.out.println("다음 업무를 동료직원에서 전달 합니다.");
}
}
LeastJob
public class LeastJob implements Scheduler {
@Override
public void getNextJob() {
System.out.println("업무를 순서대로 대기열에서 가져옵니다. ");
}
@Override
public void SendJobtoCoworker() {
System.out.println("업무 부하가 가장 적은 직원에게 업무를 전달 합니다.");
}
}
PriorityAllocation
public class PriorityAllocation implements Scheduler {
@Override
public void getNextJob() {
System.out.println("업무난이도가 높은 업무를 먼저 가져옵니다.");
}
@Override
public void SendJobtoCoworker() {
System.out.println("업무 숙련도가 높은 직원에게 전달 합니다.");
}
}
3. 결과 확인
- 다음과 같은 결과를 확인 할 수 있다.
직원 할당 방식을 선택하세요
R : 한명씩 차례대로
L : 일이 적은 직원 우선
P : 업무난이도가 높은 업무는 숙련도 높은 직원
//입력창에 R을 찍으면
R
업무를 순서대로 대기열에서 가져옵니다.
다음 업무를 동료직원에서 전달 합니다.
//입력창에 L을 찍으면
L
업무를 순서대로 대기열에서 가져옵니다.
업무 부하가 가장 적은 직원에게 업무를 전달 합니다.
//입력창에 P을 찍으면
P
업무난이도가 높은 업무를 먼저 가져옵니다.
업무 숙련도가 높은 직원에게 전달 합니다.
####문제의 원본을 변형하여 작성하는 글이다.
원본 URL : https://gitlab.com/easyspubjava/javacoursework/-/blob/master/Chapter3/3-16/README.md
'IT자료실 > Java' 카테고리의 다른 글
Java (java.sql 패키지-1) (0) | 2022.04.21 |
---|---|
Java (java.io 패키지) (0) | 2022.04.20 |
Java (추상클래스, 템플릿 메서드 예제) (0) | 2022.04.16 |
Java(java.util 클래스, java collection, Generic) (0) | 2022.04.14 |
Java(예외 처리, Java.lang 패키지) (0) | 2022.04.14 |