[JAVA #15] 인터페이스 다형성 구현과 여러가지 요소

HJoo·2022년 12월 26일
0

TodayStudy

목록 보기
17/111
post-thumbnail

인터페이스의 다형성

하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트는 인터페이스의 메서드를 이용해서 여러 객체의 구현을 사용할 수 있다

db.properties에 따라 mysql, oracle 중 선택하여 같은 인터페이스의 다른 클래스를 사용한다

인터페이스의 여러가지 요소

  • 모든 변수는 상수로 변환된다
    public static final

  • 모든 메서드는 추상 메서드이다
    모든 선언된 메서드는 추상 메서드 public abstract

  • 디폴트 메서드: 구현을 갖는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드
    default 키워드 사용
    하위 클래스에서 재정의할 수 있음

  • 정적 메서드: 인스턴스 생성과 상관 없이 인터페이스 타입으로 사용할 수 있는 메서드
    static 클래스

  • private 메서드
    인터페이스를 구현한 클래스에서 사용하거나 재정의할 수 없음
    인터페이스 내부에서만 사용하기 위해 구현하는 메서드
    default메서드나 static메서드에서 사용함

여러 인터페이스 구현하기

  • 구현코드가 없기 때문에 여러 인터페이스를 구현할 수 있음
  • 여러 인터페이스를 구현하여 다중 상속을 하게 되면,
    같은 이름의 메서드 중 어느 인터페이스의 메서드를 가져올지 모호해진다
  • 그래서 단일 상속만 가능하다

인터페이스의 상속

  • ab 인터페이스를 상속해서 c 인터페이스를 만들면
    c인터페이스를 상속한 클래스는 abc 인터페이스의 메서드를 모두 상속받을 수 있다
  • 변수의 선언을 a로 하면 a의 메서드만 사용 가능하고
    b로 하면 b의 메서드만 사용 가능하고
    c로 하면 abc의 메서드를 모두 사용할 수 있다

클래스 상속과 인터페이스 구현 함께 하기

  • 책이 순서대로 대여가 되는 도서관 구현
    책을 보관하는 자료구조가 Shelf에 구현됨 ArrayList
    Queue 인터페이스를 구현함
    Shelf 클래스를 상속받고 Queue를 구현

실습1 - 게임 레벨

  • Player가 있고 Player는 GameLevel 속성을 가집니다. 각 GameLevel 단계 마다 run(), jump(), turn() 세 가지 기능이 업그레이드 됩니다.
    초보자 레벨 : 천천히 달립니다. run() 만 가능
    중급자 레벨 : 빠르게 달리고, 점프할 수 있습니다. run(), jump() 가능
    고급자 레벨 : 엄청 빠르게 달리고, 높게 점프하고, 턴할 수 있습니다. run(), jump(), turn() 가능
    Player는 한번에 하나의 레벨 상태만을 가질 수 있습니다.
    Player가 play() 중에 레벨에 있는 go(int count) 라는 메서드를 호출하면 run() 하고 count 횟수 만큼 jump() 하고 turn() 합니다. 다음 클래스 다이어그램을 참고하여 각 레벨에서 go() 가 호출 될때 다음과 같이 출력 되도록 하세요

  • Player

    변수: level
    메서드: 레벨을 반환, 입력된 레벨로 레벨을 업그레이드, 입력한 값만큼 플레이

public class Player {
    private PlayerLevel level;
    public Player(){
        level = new BeginnerLevel();
        level.showLevelMessage();
    }
    public PlayerLevel getLevel(){
        return level;
    }
    public void upgradeLevel(PlayerLevel level){
        this.level = level;
        level.showLevelMessage();
    }
    public void play(int i) {
        level.go(i);
    }
}
  • PlayerLevel

    메서드: run하고 go에 들어온 만큼 for를 돌려서 jump하고 turn, showLevelMessage함수 생성

  • BeginnerLevel

    run, jump, turn, showLevelMessage 정의

  • AdvancedLevel

    run, jump, turn, showLevelMessage 정의

  • SuperLevel

    run, jump, turn, showLevelMessage 정의

실습2 - 스케쥴러

  • 고객 센터에 전화 상담을 하는 상담원들이 있습니다. 일단 고객에게서 전화가 오면 대기열에 저장되고 각 상담원에게 배분이 됩니다.
    배분이 되는 정책은 크게 세 가지가 있습니다.
  1. 모든 상담원이 동일한 상담 건수를 처리하도록 상담원 순서대로 배분합니다.
  2. 쉬고 있거나 상담원에게 할당된 통화 수가 가장 적은 상담원에게 배분합니다.
  3. 고객의 등급에 따라 등급이 높은 고객은 업무능력이 우수한 상담원에게 배분합니다.

세 가지 정책은 필요에 따라 바뀌어 운영될 수 있습니다. 다음 클래스 다이어그램을 참고하여 각 배분 규칙이 적용되도록 구현해 보세요

  • Scheduler(interface)

    메서드: getNextCall, sendCallToAgent 생성

  • RoundRobin

    Scheduler implement 후 구현

  • LeastJob

    Scheduler implement 후 구현

  • PriorityAllocation

    Scheduler implement 후 구현

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글