JAVA Programming

[45] 인터페이스 스케쥴러 , 다형성

꾸준히개발하자 2020. 7. 16. 15:45

 

 

인터페이스의 역할 은 ?

인터페이스는 클라이언트 프로그램에 어떤 메소드를 제공하는지 알려주는 명세 또는 약속 이다.

한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메소드를 구현했다는 의미이다.

클라이언트 프로그램은 실제 구현내용을 몰라서 인터페이스의 정의만 알면 그 객체를 사용할수있다

인터페이스를 구현해 놓은 다양한 객체를 사용한다 – 다형성

: 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();
	}
	// 간단한 내용을 보여드린거고 실제적으로 인터페이스를 정의해 놓고 프로젝트 할때 정의된 인터페이스를 가져다가 구현하는게 많다  
	// 스프링이나 프레임워크들이 굉장히 많은 인터페이스가 있는데  구현된 모듈을 장착해서 돌아가게 된다.
	// 인터페이스 여러 인터페이스가 하나의 센서로 돌아갈수도 있다  인터페이스 역할은 모듈이 해야할 것을 정의해 놓은 거이다. 
	
}

 

 

 

 

 

 

 

 

 

알고리즘 프로그램을 큰수정없이 적용 확장할수있다 

 

 

JDBC 에서 쓰이는 인터페이스