반응형
인터페이스란?
추상 메서드와 상수로만 이루어져 있음.
구현 코드가 없기 때문에 당연히 인터페이스로 인스턴스를 생성할 수 없음
그럼 인터페이스는 어떻게 사용하는 것인가?
인터페이스를 구현하는 클래스는 implements 예약어를 사용한다. 이때
1. 인터페이스에 포함된 추상 메서드를 구현하거나
2. 이 클래스를 추상 클래스로 만들거나
둘 중에 하나를 택해야 오류가 발생하지 않는다.
인터페이스의 형 변환
상속 관계에서 하위 클래스는 상위 클래스 자료형을 묵시적 형 변환을 할 수 있었던 것과 마찬가지로
인터페이스를 구현한 클래스는 인터페이스 형으로 형 변환이 가능
인터페이스의 역할
인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시하는 것입니다.
인터페이스와 다형성
package first_project;
public interface Scheduler {
public void getNextCall();
public void sendCallToAgent();
}
package first_project;
public class RoundRobin implements Scheduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옴.");
}
@Override
public void sendCallToAgent() {
System.out.println("다음 순서 상담원에게 배분.");
}
}
package first_project;
public class LeastJob implements Scheduler{
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담 없무가 없거나 대기가 가장 적은 상담원에게 할당");
}
}
package first_project;
public class PriorityAllocation implements Scheduler {
@Override
public void getNextCall() {
System.out.println("고객 등급이 높은 고객의 전화를 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 스킬이 높은 상담원에게 우선적으로 배분합니다.");
}
}
package first_project;
import java.io.IOException;
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.getNextCall();
scheduler.sendCallToAgent();
}
}
결과
전화 상담 할당 방식을 선택하세요.
R : 한명씩 차례로 할당
L : 쉬고 있거나 대기가 가장 적은 상담원에게 할당
P : 우선순위가 높은 고객 먼저 할당
p
고객 등급이 높은 고객의 전화를 먼저 가져옵니다.
업무 스킬이 높은 상담원에게 우선적으로 배분합니다.
인터페이스를 활용하면 쉽게 확장성 있는 코드를 구현할 수 있다.
댓글