충분히 쌓여가는
8.5 디폴트 메소드 본문
인터페이스에는 완전한 실행 코드를 가진 디폴트 메소드를 선언할 수 있다
추상 메소드는 실행부(중괄호{})가 없지만, 디폴트 메소드에는 실행부가 있다
public default 리턴타입 메소드명(매개변수, ...) { ... }
예제
package ch08.sec05;
public interface RemoteControl {
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
void turnOn();
void turnOff();
void setVolume(int volume);
default void setMute(boolean mute) {
if(mute) {
System.out.println("무음");
setVolume(MIN_VOLUME);
} else {
System.out.println("무음 해제");
}
}
}
package ch08.sec05;
public class Television implements RemoteControl {
private int volume;
@Override
public void turnOn() {
System.out.println("Tv를 켭니다");
}
@Override
public void turnOff() {
System.out.println("Tv를 끕니다");
}
@Override
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("현재 볼륨: " + this.volume);
}
}
디폴트 메소드는 구현 객체가 필요한 메소드
RemoteControl의 setMute() 메소드를 호출하려면 구현 객체인 Television 객체를 인터페이스 변수에 대입하고 나서 setMute()를 호출해야 한다
package ch08.sec05;
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl rc = new Television();
rc.setMute(true);
rc.setMute(false);
}
}
구현 클래스는 디폴트 메소드를 재정의해서 자신에게 맞게 수정할 수도 있다
재정의 시 주의할 점
public 접근 제한자를 반드시 붙여야 하고, default 키워드를 생략해야 한다
'이것이 자바다 > 08 인터페이스' 카테고리의 다른 글
8.7 private 메소드 - private 메소드, private 정적 메소드 (0) | 2024.04.03 |
---|---|
8.6 정적 메소드 (0) | 2024.04.03 |
8.4 추상 메소드 - public abstract (0) | 2024.04.03 |
8.3 상수 필드 - public static final (0) | 2024.04.03 |
이것이 자바다 8장 확인 문제 (0) | 2024.02.04 |