SHUSTORY

10-2 인터페이스와 다형성 본문

프로그래밍/JAVA

10-2 인터페이스와 다형성

어서오시우 2023. 3. 5. 19:36
728x90

인터페이스의 역할

메서드 선언부만 있는 인터페이스를 사용하는 이유는 무엇일까?

인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 미리 알려주는 명세의 역할을 한다.

* 참고로 서버는 기능을 제공하는 쪽, 클라이언트는 기능을 사용하는 쪽을 의미한다.

 

예를 들어 인퍼에이스 A가 있고, 이를 구현한 B 클래스와 B 클래스를 사용하는 C 프로그램이 있다고 가정해보자.

A에는 어떤 매개변수가 사용되며 어떤 자료형이 반환되는지와 함께 구현할 추상 메서드가 모두 선언되어 있다.

즉 C에서는 B의 구현 코드 전체를 살펴보지 않더라도 A만 보면 이 B 클래스를 어떻게 사용할지 알 수 있다.

 

이렇듯 프로그램에서 각 클래스를 사용할 때 클래스에서 구현한 내용을 몰라도

인터페이스에서 선언한 메서드의 매개변수 자료형과 반환 값만 알면 인터페이스를 구현한 어떤 클래스든 사용 가능하다.

클라이언트 프로그램은 인터페이스에서 약속한 명세대로 구현한 클래스를 생성해서 사용하면 되는 것이다.

 

 

인터페이스와 다형성

인터페이스를 사용하면 클라이언트 프로그램을 많이 수정하지 않고,

기능을 추가하거나 다른 기능을 사용하는 등 다형성을 구현하여 확장성 있는 프로그램을 만들 수 있다.

 

 

상담원 예제

고객 센터에 전화상담원들이 있고, 각 전화를 상담원에게 다음 세 가지 방법으로 배분하는 방식을 구현해보자.

  • 순서대로 배분하기
  • 짧은 대기열 찾아 배분하기
  • 우선순위에 따라 배분하기

 

인터페이스 정의하기

위 세가지 배분 방식에서 공통으로 사용하는 메서드를 선언하는 Schedule 인터페이스를 구현해보자.

 

Schedule 인터페이스

 

  • getNextCall( ) _ 다음 전화를 가져오는 기능
  • sendCallToAgent( ) _ 상담원에게 전화를 배분하는 기능

인터페이스 구현하기

상담원에게 전화를 배분하는 세 가지 시나리오에 대해 인터페이스를 구현하여 클래스를 작성해보자.

 

RoundRobin 클래스_순서대로 배분
LeastJob 클래스_짧은 대기열 먼저 배분
PriorityAllocation 클래스_우선순위에 따라 배분

 

프로그램 실행하기

사용자가 콘솔 화면에서 문자 하나를 입력하면 그 입력 문자에 따라 배분 정책을 정하고 실행하는 프로그램을 구현해보자.

 

실행 프로그램

* 어떤 클래스를 구현하건 클라이언트가 인터페이스를 구현한 클래스를 사용하는 방식은 25,26행 코드와 같다.

클라이언트 프로그램은 각 클래스의 구현 방법을 몰라도 인터페이스에서 선언된 매개변수,

반환 값을 보고 클래스를 사용할 수 있다.

이렇듯 인터페이스는 구현된 클래스를 사용하는 클라이언트 코드와 기능을 제공하는 코드 사이의 약속이다.

'프로그래밍 > JAVA' 카테고리의 다른 글

11-1 Object 클래스  (0) 2023.03.06
10-3 인터페이스 요소 살펴보기  (0) 2023.03.05
10-1 인터페이스  (0) 2023.03.05
09-4 final 예약어  (0) 2023.03.04
09-3 템플릿 메서드 응용하기  (0) 2023.03.04