지금까지는 일단 한 개의 인터페이스를 통해, 하나의 객체를 호출하는 형태로 연습해 왔습니다. 하지만, 부동산 거래를 할 때 하나의 매물에 여러 개의 부동산이 중개를 진행하듯이 - 여러 개의 인터페이스가 다중으로 하나의 구현 클래스를 호출하게 되는 경우도 있습니다. 하나의 클래스가 다중의 인터페이스를 구현하게 된다는 의미지요.
만일 하나의 클래스에 두 개의 인터페이스인 '인터페이스1'과 '인터페이스2'가 모두 구현된다고 가정하면, 아래와 같은 형태로 구현 클래스가 선언되어야 합니다. 물론 인터페이스1과 2의 모든 추상 메서드를 구현해야만 합니다. 하나라도 구현이 빠지게 되면 해당 구현 클래스는 추상 클래스로서 선언되어야 하는 것은 기본 구현 클래스에서의 원칙과 동일합니다.
public class 구현클래스이름 implements 인터페이스1, 인터페이스2 {
// 인터페이스1 추상 메서드의 실체 메서드
// 인터페이스2 추상 메서드의 실체 메서드
}
그럼 여기서 우리가 만들어서 활용해온 RemoteControl 인터페이스 예제를 다시 한번 활용해서, 다중 인터페이스 예시를 만들어보도록 하겠습니다. 기존에 만들어 둔 RemoteControl 인터페이스에 새롭게 WebBrowse 인터페이스를 추가로 구현하는 클래스인 SmartTelevision을 생성해 보도록 하겠습니다.
public interface RemoteControl {
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void setVolume(int volume);
default void setMuete(boolean mute) {
if(mute) {
System.out.println("무음");
} else {
System.out.println("무음 해제");
}
}
static void changeBattery() {
System.out.println("배터리 교환");
}
}
public interface WebBrowse {
void search(String url);
}
이렇게 두 개의 인터페이스가 선언되었습니다. 이제 이 두 개의 인터페이스를 구현하는 클래스를 만들어 보겠습니다.
public class SmartTelevision implements RemoteControl, WebBrowse {
private int volume;
public void turnOn() {
System.out.println("스마트TV 전원 ON");
}
public void turnOff() {
System.out.println("스마트TV 전원 OFF");
}
public void setVolume(int volume) {
if(volume > RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
} else if(volume < RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
} else {
this.volume = volume;
}
System.out.println("스마트TV 볼륨: " + volume);
}
public void search(String url) {
System.out.println(url + " 을 검색");
}
}
'Programming > JAVA' 카테고리의 다른 글
인터페이스(7) - 인터페이스의 구현과 사용 2 : 디폴트, 정적 메서드 (0) | 2023.03.22 |
---|---|
인터페이스(7) - 인터페이스의 구현과 사용 1 : 추상 메서드 사용 (0) | 2023.03.22 |
인터페이스(5) - 인터페이스 구현 : 익명 객체의 구현 (0) | 2023.03.20 |
인터페이스(4) - 인터페이스 구현 기본 원리 (0) | 2023.03.18 |
인터페이스(3) - 인터페이스 구성멤버의 개념과 특성 (0) | 2023.03.16 |