728x90
인터페이스 사용
인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지가 저장
인터페이스 변수는 구현 객체의 참조 용도로 사용
- 클래스의 필드
- 생성자 또는 메서드의 매개 변수
- 생성자 또는 메서드의 로컬 변수
1. 추상메소드 사용
구현 객체가 인터페이스 타입에 대입되면 인터페이스에 선언된 추상메소드를 개발코드에서 호출
rc = new Television();
rc.turnOn(); // Television의 turnOn() 실행
rc.turnOff(); // Television의 turnOff() 실행
2. 디폴트 메소드 사용
- 인터페이스에 선언되지만 인터페이스에서 바로 사용불가
- 추상 메소드가 아닌 인스턴스 메소드이므로 구현 객체가 있어야 사용가능
- 인터페이스의 모든 구현 객체가 가지고 있는 기본 메소드
- 구현 클래스에서 디폴트 메서드가 변경이 필요한 경우, 재정의(Override)가 가능
예제
public class Audio implements RemoteControl {
//필드
private int volume;
private boolean mute;
//turnOn() 추상 메소드의 실체 메소드
public void turnOn() {
System.out.println("Audio를 켭니다.");
}
//turnOff() 추상 메소드의 실체 메소드
public void turnOff() {
System.out.println("Audio를 끕니다.");
}
//setVolume() 추상 메소드의 실체 메소드
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("현재 Audio 볼륨: " + volume);
}
@Override
public void setMute(boolean mute) {
this.mute = mute;
if(mute) {
System.out.println("Audio 무음 처리합니다.");
} else {
System.out.println("Audio 무음 해제합니다.");
}
}
}
예제에서는 디폴트 매소드를 재정의(@override) 했다.
어떤 객체가 인터페이스에 대입되느냐에 따라서 setMute()메소드의 실행 결과는 달라진다.
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl rc = null;
rc = new Television();
rc.turnOn();
rc.setMute(true);
rc = new Audio();
rc.turnOn();
rc.setMute(true);
}
}
3. 정적 메서드 사용
인터페이스의 정적 메소드는 인터페이스로 바로 호출이 가능
public class RemoteControlExample {
public static void main(String[] args) {
RemoteControl.changeBattery();
}
}
참고자료 : 이것이 자바다
728x90
'📕 JAVA > 인터페이스' 카테고리의 다른 글
6. 인터페이스 상속 (0) | 2023.03.28 |
---|---|
5. 인터페이스 타입 변환과 다형성 (0) | 2023.03.28 |
3. 인터페이스 구현 (0) | 2023.03.28 |
2. 인터페이스 선언 (0) | 2023.03.28 |
1. 인터페이스의 역할 (0) | 2023.03.28 |