본문 바로가기

Java 공부/신용권의 이것이 자바다

인터페이스 Interface 확장

반응형

인터페이스는 객체 사용 방법(메소드 호출 방법)을 기술한 타입이다.

따라서 메소드 선언부만 있으면 된다.

그러나 자바8부터는 실행내용을 가지고 있는 디폴트 메소드를 작성할 수 있다.

이 디폴트 메소드는 인터페이스에 선언 되지만, 인터페이스만으로 사용할 수 없다.

디폴트 메소드는 구현 객체의 인스턴스 메소드이다.

그렇다면, 인터페이스에서 왜 디폴트 메소드가 필요한 걸까?

그것은 인터페이스의 확장을 위해 필요하다.

기존 인터페이스에서 추상메소드(method2();)를 추가할 수는 없다.

추상메소드를 추가하면, 기존 구현 클래스들이 모두 에러가 난다.

그런데 디폴트 메소드(default methode2() {...})는 추상 메소드가 아니다.

디폴트 메소드는 구현 클래스에서 꼭 구현할 필요도 없다.

디폴트 메소드를 추가하더라도 기존 구현 클래스들은 문제 없이 작동한다.

디폴트 메소드를 재정의하는 새로운 구현 클래스를 만들 수 있다.

그럼, 코드로 확인해 보자!

먼저,  Interface 를 만든다.

method1은 추상메소드로 만들고...

method2는 이후에 추가 한 것으로, 디폴트 메소드로 작성했다.

디폴트 메소드는 반드시 실행블록( {...} )이 있어야 한다.

실행블록에는 실행문을 작성할 수 있으며, 비워놔도 된다.

아래에 있는 MyClassA 클래스는 기존에 존재했던 구현 클래스이다. 

보시다시피, method1만 구현했다.

그럼, 인터페이스에 method2를 디폴트 메소드로 추가한 뒤, 새로운  MyClassB라는 클래스를 만들어보자!

그런 뒤, 다음과 같이 실행코드를 작성한다.

디폴트 메소드가 문제 없어 호출되어 실행되는 것을 확인할 수 있을 것이다.

이런 식으로 디폴트 메소드를 추가하여, 인터페이스를 확장시킬 수 있다. 

그렇다면, 인터페이스의 디폴트 메소드를 자식 인터페이스에서 어떻게 활용하는지 살펴보자.

1. 디폴트 메소드를 단순히 상속만 받는다.(아무것도 하지 않고 그냥 놔둔다.)

2. 디폴트 메소드를 재정의( Override)해서 실행 내용을 변경한다.

3. 디폴트 메소드를 추상 메소드로 재선언한다.

반응형