반응형
39. 인터페이스를 활용한 다형성 구현 - 2
package call_center;
public class LeastJob implements Schedular{
@Override
public void getNextCall() {
System.out.println("상담 전호를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담 업무가 없거나 상담 대기가 가장 적은 상담원에게 할당합니다.");
}
}
package call_center;
public interface Schedular {
public void getNextCall();
public void sendCallToAgent();
}
//인터페이스는 모듈이 해야할 일을 정의해놓은 것이다.
package call_center;
public class PriorityALlocation implements Schedular{
@Override
public void getNextCall() {
System.out.println("고객 등급이 높은 고객의 call 을 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 숙련도가 높은 상담원에게 먼저 배분합니다.");
}
}
package call_center;
import java.io.IOException;
public class ScheduleTest {
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();
Schedular schedular = null;
if (ch == 'R' || ch == 'r') {
schedular = new RoudRobin();
} else if (ch == 'L' || ch == 'l') {
schedular = new LeastJob();
} else if (ch == 'P' || ch == 'p') {
schedular = new PriorityALlocation();
} else {
System.out.println("지원안됨");
return;
}
schedular.getNextCall();
schedular.sendCallToAgent();
/*
* 전화 상담원 할당 방식을 선택하셍 R: 한명씩 차례대로 L: 대기가 적은 상담원 우선 P: 우선순위가 높은 고객우선 숙련도 높은 상담원 R
* 상담 전호를 순서대로 대기열에서 가져옵니다. 다른 순서 상담원에게 배분합니다.
*/
}
}
40. 인터페이스의 요소들 - 1
| 인터페이스 요소
상수: 선언된 모든 변수는 상수로 처리됨
메서드: 모든 메서드는 추상메서드
디폴트 메서드: 기본 구현을 가지는 메서드, 구현하는 클래스에서 재정의 할 수 있음
정적메서드: 인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 메서드
private 메서드: 인터페이스 내에서 사용하기 위해 구현한 메소드
구현한 클래스에서 재정의 할 수 없음
| 여러개의 인터페이스 구현하기
인터페이스는 구현 코드가없으므로 하나의 클래스가 여러 인터페이스를 구현할 수 있음
디폴트 메서드의 이름이 중복되는 경우 재정의 함.
| 인터페이스 상속
인터페이스 간에 상속이 가능함
구현이 없으므롷 extends 뒤에 여러 인터페이스를 상속 받을 수 있음.
구현 내용이 없으므로, 타입 상속이라고 한다.
package interfaceex;
public class CompleteCalc extends Calculator {
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if (num2 == 0) {
return ERROR;
} else {
return num1 / num2;
}
}
public void showInfo() {
// TODO Auto-generated method stub
System.out.println("구현 완료");
}
//
// @Override
// public void description() {
// System.out.println("new 정수 계산기를 구현합니다.");
// }
}
package interfaceex; public abstract class Calculator implements Calc{ @Override public int add(int num1, int num2) { // TODO Auto-generated method stub return num1 +num2; } @Override public int substract(int num1, int num2) { // TODO Auto-generated method stub return num1 -num2; } }
package interfaceex;
public interface Calc {
double PI = 3.14; // 상수, 변수와 상관없이 상수 메모리 사용
int ERROR = -99999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
default void description() {
myMethod();
System.out.println("정수 계산기를 구현합니다.");
}
static int total(int[] arr) {
int total = 0;
for (int i : arr) {
total += i;
}
myStaticMethod();
return total;
}
private void myMethod() {
System.out.println("private Method");
}
// static 에서만 사용 가능
private static void myStaticMethod() {
System.out.println("private static Method");
}
}
package interfaceex;
abstract class CalcTest {
public static void main(String[] args) {
CompleteCalc calc = new CompleteCalc();
int n1 = 10;
int n2 = 2;// C:\Users\rha31\eclipse\java-2020-03\eclipse
System.out.println(calc.add(n1, n2));
System.out.println(calc.substract(n1, n2));
System.out.println(calc.times(n1, n2));
System.out.println(calc.divide(n1, n2));
calc.showInfo();
calc.description();
int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(Calc.total(arr));
/*
* 12 8 20 5 구현 완료 private Method 정수 계산기를 구현합니다. 15
*
*
*/
}
}
자바 인강이 듣고 싶다면 =>https://bit.ly/3ilMbIO
반응형
'스프링, 자바' 카테고리의 다른 글
09. 운영체제 구조 - 사용자 모드와 커널 모드 (0) | 2020.09.09 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 31회차 미션 (0) | 2020.09.09 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 29회차 미션 (0) | 2020.09.07 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 28회차 미션 (0) | 2020.09.06 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 27회차 미션 (0) | 2020.09.05 |