[Java] 인터페이스

2020. 6. 24. 17:08Language/Java

1. 인터페이스

객체와 오브젝트에 대한 명세이다(어떤 메서드를 제공하고 어떤 역할을 수행하는지). 모두 추상 메서드로 구현되어 있고 new 할 수 없다. 컴파일 과정에서 인터페이스에 선언된 변수는 public static final 키워드가 붙으며 상수화가 된다. 컴파일 과정에서 인터페이스에 선언된 메서드는 abstract 키워드 없이 모두 추상 메서드가 된다. 인터페이스를 상속받는 클래스는 implements 키워드를 통해 상속받는다.

Calc, Calculator, CompleteCalc, CalcTest

※ 인터페이스를 상속받는 클래스에서 상위 클래스의 특정 추상 메서드만 구현하게 될 경우 abstract 키워드를 통해 추상 클래스로 생성 후 사용한다.
※ 인터페이스의 요소는 추상 메서드, 상수로 이루어져 있지만 8 버전 이후로 디폴트 메서드, 정적 메서드, private 메서드가 추가가 되었고 추가된 요소들은 기본적으로 구현을 하지 못하는(new 할 수 없는) 인터페이스를 여러 클래스들이 중복된 구현을 방지하기 위해 생성된되었다.


요소 설명
디폴트 메서드 - 기본 구현을 가지는 메서드
- 구현하는 클래스에서 재정의 가능
정적 메서드 - 인스턴스 생성과 상관없이 인터페이스 타입으로 호출
private 메서드 - 인터페이스 내에서 사용하기 위해 구현한 메서드
- 구현하는 클래스에서 재정의 할 수 없음

 

 

 

2. 인터페이스 응용 (1)

클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세 또는 약속이다. 한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메서드를 구현했다는 의미이며, 클라이언트 프로그램은 실제 구현 내용을 몰라도 인터페이스의 정의만 알면 그 객체를 사용할 수 있다.

인터페이스의 역할 도식화
Scheduler, RoundRobin, LeastJob, PriorityAllocation, SchedulerTest

3. 인터페이스 응용 (2)

1) 인터페이스 구현

인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스를 구현할 수 있다. 디폴트 메서드의 이름이 중복 되는 경우에는 재정의한다.

인터페이스 구현 도식화

 

Buy, Sell, Customer, CustomerTest

2) 인터페이스 상속

인터페이스 간에도 상속이 가능하다. 구현이 없으므로 extends 뒤에 여러 인터페이스를 상속받을 수 있고 구현 내용이 없으므로 타입 상속이라고 정의한다.

인터페이스 상속 도식화
X, Y, MyInterface, MyClass

3) 인터페이스 구현, 클래스 상속

인터페이스 구현, 클래스 상속 도식화
Shelf, Queue, BookShelf, BookShelfTest


[참고] github.com/ozofweird/Java_Practice

728x90