728x90
인터페이스에 구현 객체를 대입하는 방법
추상 메소드 사용
RemoteControl rc = new Television();
rc.turnOn(); -> Television의 turnOn() 실행
rc.turnOff(); -> Television의 turnOff() 실행
디폴트 메소드 사용
인터페이스만으로는 사용할 수 없다.
- 구현 객체가 인터페이스에 대입되어야 호출할 수 있는 인터페이스 메소드이다.
모든 구현 객체가 가지고 있는 기본 메소드로 사용한다.
- 필요에 따라 구현 클래스가 디폴트 메소드를 재정의해서 사용할 수 있다.
예제)
package sec04.exam02_default_method_use;
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("무음 처리합니다.");
}
else
{
System.out.println("무음 해제합니다.");
}
}
//정적메소드
static void changeBattery()
{
System.out.println("건전지를 교환합니다.");
}
}
package sec04.exam02_default_method_use;
public class Audio implements RemoteControl
{
private int volume;
private boolean mute;
@Override
public void turnOn()
{
System.out.println("Audio를 켭니다.");
}
@Override
public void turnOff()
{
System.out.println("Audio를 끕니다.");
}
@Override
public void setVolume(int volume)
{
if(volume > RemoteControl.MAX_VOLUME) //MAX_VOLUME보다 값을 높여도
{
this.volume = RemoteControl.MAX_VOLUME; //최대인 MAX_VOLUME으로 저장
}
else if(RemoteControl.MIN_VOLUME > volume) //MIN_VOLUME보다 값을 낮춰도
{
this.volume = RemoteControl.MIN_VOLUME; //최소인 MIN_VOLUME으로 저장
}
else
{
this.volume = volume;
}
System.out.println("현재 TV 볼륨 : " + this.volume);
}
//setMute 재정의
@Override
public void setMute(boolean mute)
{
this.mute = mute;
if(mute)
{
System.out.println("Audio 무음 처리합니다.");
}
else
{
System.out.println("Audio 무음 해제합니다.");
}
}
static void changeBattery()
{
System.out.println("건전지를 교환합니다.");
}
}
package sec04.exam02_default_method_use;
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) //MAX_VOLUME보다 값을 높여도
{
this.volume = RemoteControl.MAX_VOLUME; //최대인 MAX_VOLUME으로 저장
}
else if(RemoteControl.MIN_VOLUME > volume) //MIN_VOLUME보다 값을 낮춰도
{
this.volume = RemoteControl.MIN_VOLUME; //최소인 MIN_VOLUME으로 저장
}
else
{
this.volume = volume;
}
System.out.println("현재 TV 볼륨 : " + this.volume);
}
}
package sec04.exam02_default_method_use;
public class RemoteControlExample
{
public static void main(String[] args)
{
RemoteControl rc = null;
rc = new Television(); //구현 객체 대입
rc.turnOn();
rc.setMute(true); // 디폴트 메소드 사용
//RemoteControl.setMute(true); (x) : 반드시 구현 객체가 대입이 되어야만 사용이 가능
rc = new Audio();
rc.turnOn();
rc.setMute(true); //Audio에 재정의된 메소드가 호출
}
}
정적 메소드 사용
인터페이스로 바로 호출이 가능하다.
예제)
package sec04.exam03_static_method_use;
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("무음 처리합니다.");
}
else
{
System.out.println("무음 해제합니다.");
}
}
//정적메소드
static void changeBattery()
{
System.out.println("건전지를 교환합니다.");
}
}
package sec04.exam03_static_method_use;
public class RemoteControlExample
{
public static void main(String[] args)
{
//정적메소드 사용
RemoteControl.changeBattery();
}
}
728x90
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 인터페이스 상속 (0) | 2021.07.14 |
---|---|
[JAVA] 타입변환과 다형성(인터페이스) (0) | 2021.07.14 |
[JAVA] 인터페이스 구현 (2) (0) | 2021.07.13 |
[JAVA] 인터페이스 구현 (1) (0) | 2021.07.12 |
[JAVA] 인터페이스 (0) | 2021.07.12 |