인터페이스2

1. 인터페이스와 다형성

  • 인터페이스는 ‘Client Code’와 서비스를 제공하는 ‘객체’ 사이의 약속이다
  • ‘A 객체가 B 인터페이스 타입이다’ => A 객체가 B 인터페이스의 메서드를 구현했다는 의미
  • Client는 어떻게 구현되었는지 상관없이 interface의 정의만을 보고 사용할 수 있다(ex: JDBC)

  • 예시
public interface Scheduler {
	void getNextCall();
	void sendCallToAgent();
}
public class RoundRobin implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("다음 순서 상담원에게 배분합니다.");
	}

}
public class ListJob implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("현재 상담 업무가 없거나 상담대기가 가장 적은 상담원에게 할당합니다.");
	}

}
public class PriorityAllocation implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("등급이 높은 고객의 전화를 먼저 가져옵니다.");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("업무 스킬이 가장 높은 상담원의 대기열 제일 앞에 배분합니다.");
	}

}
import java.io.IOException;

public class SchedulerTest {
	public static void main(String[] args) throws IOException {
		// R, L, P
		System.out.println("전화상담 배분방식을 선택하세요");
		System.out.println("R, L, 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 ListJob();
		} else if (ch == 'P' || ch == 'p') {
			scheduler = new PriorityAllocation();
		} else {
			System.out.println("지원하지 않는 기능입니다.");
			return;
		}
		
		scheduler.getNextCall();
		scheduler.sendCallToAgent();
	}
}

태그:

카테고리:

업데이트: