상세 컨텐츠

본문 제목

자바 객체지향 프로그래밍 - 14 [인터페이스]

JAVA

by 덴마크 당나귀 2023. 1. 12. 15:25

본문

728x90

인터페이스 = 명세

요소

  • 추상 매서드
  • 상수 : 선언된 모든 변수는 상수로 처리됨
  • 디폴트 매서드 : 기본 구현을 가지는 매서드, 구현하는 클래스에서 재정의 가능
  • 정적 매서드 : 인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 매서드
  • private 매서드 : 인터페이스 내에서 사용하기 위해 구현한 매서드, 구현하는 클래스에서 재정의 불가능

인터페이스를 구현한 클래스는 인터페이스 타입으로 변수를 선언하여 인스턴스를 생성할 수 있음

인터페이스는 구현 코드가 없기 때문에 타입 상속이라고도 함

인터페이스는 주로 설계할 때 사용함


 

역할

  1. 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세 또는 약속을 명시함
  2. 한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메서드를 구현했다는 의미
  3. 클라이언트 프로그램은 실제 구현내용을 몰라도 인터페이스의 정의만 알면 그 객체를 사용할 수 있음
    1. 클라이언트는 실제 구현체를 보고 실제 내용을 쓰는 것이 아니라, 인터페이스를 보고 가져다가 사용하므로 일종의 명세라고 봄.
  4. 인터페이스를 구현해 놓은 다양한 객체를 사용함 - 다형성 ex) JDBC를 구현한 오라클, MYSQL 라이브러리 등

 

public interface Scheduler {
    void getNextCall();

    void sendCallAgent();
}
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.sendCallAgent();
}

인터페이스 Scheduler를 RoundRobin, LeastJob, PriorityAllocation등으로 구현체로 만들어서 상황에 맞게(다형성) 사용할 수 있다.

인터페이스는 구현 코드가 없어서 하나의 클래스가 여러 인터페이스를 구현할 수 있음 [동시 상속 가능]

디폴트 매서드의 이름이 중복되는 경우에는 재정의 함.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

관련글 더보기