IT자료실/Java

Java (인터페이스, 클래스 동시 상속 예제)

Ramda 2022. 4. 19. 00:49

문제

직원들의 업무효율을 높이기 위한 프로그램 작성
일이 생기면 대기열에 저장되고 각 직원에게 배분이 됩니다.
배분이 되는 정책은 크게 세 가지가 있습니다.

모든 직원이 동일한 업무개수를 처리하도록 직원 순서대로 배분합니다.

쉬고 있거나 직원에게 할당된 업무의 수가 가장 적은 직원에게 배분합니다.

업무 등급에 따라 등급이 높은 업무는 업무능력이 우수한 직원에게 배분합니다.

세 가지 정책은 필요에 따라 바뀌어 운영될 수 있습니다. (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