- 인터페이스란?
: 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 추상메서드와 상수로만 이루어져 있고 구현된 코드가 없기 때문에 인터페이스로는 인스턴스를 생성할 수 없다.

-> 인터페이스 만들기

-> 인터페이스 구현하기 (추상 클래스로 만들고 추상 메서드를 2개 구현함.)

-> 계산기 클래스 완성

-> 클래스 실행
-> CompleteCalc 클래스는 상위 클래스인 Calculator 형이면서, Calc 인터페이스를 구현하였으므로 Calc형이기도 하다. 인터페이스를 구현한 클래스가 있을 때 그 클래스는 해당 이너페이스형으로 묵시적 형 변환이 이루어지며, 형 변환되었을 때 사용할 수 있는 메서드는 인터페이스에서 선언한 메서드뿐이다.
- 인터페이스의 역할
: 클라이언트 프로그램에 어떤 메서드를 제공하는지 미리 알려주는 명세 또는 약속의 역할을 한다. 즉, 인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시함.
- 인터페이스를 사용하여 다형성을 구현한 확장성 있는 프로그램 만들기





-> 위 출력칸에 원하는 정책을 입력하면 아래처럼 출력됨.

- 상담 전화 배분 정책 추가하기
%20AgentGetCall%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0.PNG)
%20AgentGetCall%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84.PNG)
- 인터페이스 요소
: 상수, 디폴트 메서드, 정적 메서드, private 메서드
- 디폴트 메서드
: 기본으로 제공되는 메서드. 인터페이스에서 구현하지만, 이후 인터페이스를 구현한 클래스가 생성되면 그 클래스에서 사용할 기본 기능. default 예약어를 사용하여 선언한다. 하위 클래스에서 디폴트 메서드를 재정의 할 수 있다.
- 정적 메서드
: static 예약어를 사용하여 선언. 클래스 생성과 무관하게 사용할 수 있다. 정적 메서드를 사용할 때는 인터페이스 이름으로 직접 참조하여 사용한다.
- private 메서드
: 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 없다. 따라서 기존에 구현된 코드를 변경하지 않고 인터페이스를 구현한 클래스에서 공통으로 사용하는 경우에 private 메서드로 구현하면 코드 재사용성을 높일 수 있다. 클라이언트 프로그램에 제공할 기본 기능을 private 메서드로 구현하기도 한다. private 메서드는 코드를 모두 구현해야 하므로 추상 메서드에 private 예약어를 사용할 수는 없지만, static 예약어는 함께 사용할 수 있다. private static 메서드는 정적 메서드에서 호출하여 사용한다.
- 디폴트 메서드, 정적 메서드, private 메서드
.PNG)
.PNG)
- 한 클래스가 여러 인터페이스를 구현
: 인터페이스는 구현 코드나 멤버 변수를 가지지 않기 때문에 여러 개를 동시에 구현할 수 있다. 두 인터페이스에 같은 이름의 메서드가 선언되었다고 해도 구현은 클래스에서 이루어지므로, 어떤 메서드를 호출해야 하는지 모호하지 않다.
- 두 인터페이스의 디폴트 메서드가 중복되는 경우
: 두 인터페이스를 구현하는 클래스에서 해당 메서드를 재정의 해야 한다. 클래스에서 디폴트 메서드를 재정의하면 클래스를 생성하여 사용할 때 재정의된 메서드가 호출된다.
- 인터페이스 상속
: 인터페이스 간에도 상속이 가능하다. 인터페이스 간 상속은 구현 코드를 통해 기능을 상속하는 것이 아니므로 형 상속(type inheritance)라고 한다. 하나의 클래스만 상속 받을 수 있는 클래스와는 달리 인터페이스는 여러 개를 동시에 상속받을 수 있다. 인터페이스들을 상속 받은 가장 하위 클래스에서 상위 인터페이스의 추상 메서드를 구현해야 한다. 생성한 클래스는 상위 인터페이스형으로 변환할 수 있다. 다만 형 변환한 상위 인터페이스에 선언한 메서드만 호출 가능.
- 프로그램이 하나인데 사용하는 데이터베이스가 제각각일 때 데이터 베이스 기능을 수행할 인터페이스를 정의한다. 인터페이스 정의에 맞게 여러 데이터베이스 관련 모듈을 개발하면 된다. 인터페이스를 잘 정의한다면 확장성 있는 프로그램을 만들 수 있다.