인터페이스의 역할 은 ?
인터페이스는 클라이언트 프로그램에 어떤 메소드를 제공하는지 알려주는 명세 또는 약속 이다.
한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메소드를 구현했다는 의미이다.
클라이언트 프로그램은 실제 구현내용을 몰라서 인터페이스의 정의만 알면 그 객체를 사용할수있다
인터페이스를 구현해 놓은 다양한 객체를 사용한다 – 다형성
: JDBC 를 구현한 오라클, MSSQL 라이브러리 등이 있다.
라운드로빈 방식 차례대로
짧은 상담원 에게 배분한다던가 대기열이 긴다 해도 숙련도가 높은 상담원 등 우선 배분할수있는 정책들 배분을 하기위한 기능은 이미 정해져있을것이다.
스케쥴링에는
대기열에서 가져오는 getNextCall() 과 상담원의 전화를 가져오는 상담원 sendCallToAgent
여기서 라운드로빈 , 큐 , 프라이어티 방식들이 있다
이런 방식들은 디자인패턴에 나오는 stretegy pattern 이 있다.
웹페이지를 만들거나 클라이언트 프로그래머 이면 어떤 모듈인지만 알면되고 상세한걸 알필요가없다
스케쥴링 하는데 어떤 메소드만 제공하는지 만 알면 된다.
코드도 안짜면서 이 스케쥴링이 되기 위한 필요한 명세를 설계하는 것
package scheduler;
public interface Scheduler {
public void getNextCall();
public void sendCallToAgent();
}
인터페이스로 어떤 메소드를 설계해야되는지 명시해 준다.
라운드로빈 순서대로 대기열 방식
package scheduler;
public class RoundRobin implements Scheduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다. ");
}
@Override
public void sendCallToAgent() {
System.out.println("다음 순서의 상담원에게 배분합니다");
}
}
상담대기가 적은 사람에게 할당
package scheduler;
public class LeastJob implements Scheduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다. ");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담업무가 없거나 상담대기가 가장 적은 상담원에게 할당합니다.");
}
}
package scheduler;
public class PriorityAllocation implements Scheduler {
@Override
public void getNextCall() {
System.out.println("고객 등급이 높은 고객의 call을 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 숙련도가 높은 상담원에게 먼저 배분 합니다 ");
}
}
고객등급이 높은 고객의 call를 먼저 가져옵니다.
package scheduler;
import java.io.IOException;
public class SchedulerTest {
public static void main(String[] args) throws IOException {
// 클라이언트 프로그램 쪽
System.out.println("전화 상담원 할당 방식을 선택하세요"); // 콘솔 아웃은 out
System.out.println("R : 한명씩 차례대로");
System.out.println("L : 대기가 적은 상담원 우선");
System.out.println("P : 우선순위가 높은 고객 우선 숙련도 높은 상담원");
int ch = System.in.read(); // 콘솔을 읽어들이는게 System.in.read() 이다. 이셉션 처리해야 한다.
Scheduler scheduler = null; // 모두다 스케쥴러 타입이니까 스케쥴러로 선언하면 되고 아무것도 없는상태니까 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();
}
// 간단한 내용을 보여드린거고 실제적으로 인터페이스를 정의해 놓고 프로젝트 할때 정의된 인터페이스를 가져다가 구현하는게 많다
// 스프링이나 프레임워크들이 굉장히 많은 인터페이스가 있는데 구현된 모듈을 장착해서 돌아가게 된다.
// 인터페이스 여러 인터페이스가 하나의 센서로 돌아갈수도 있다 인터페이스 역할은 모듈이 해야할 것을 정의해 놓은 거이다.
}
'JAVA Programming' 카테고리의 다른 글
[50] 최상위 클래스 Object 클래스 , toString() 메소드 (0) | 2020.07.17 |
---|---|
[48] 인터페이스 요소들 (0) | 2020.07.17 |
[41] final 템플릿메소드 활용하기 + 다형성이해-자식 , 추상클래스 (0) | 2020.07.16 |
[40] 추상클래스를 이용한 템플릿 메소드 , final static 상수 (0) | 2020.07.16 |
[39] 추상 클래스 abstract class , 상속 하위클래스 구현 (0) | 2020.07.16 |