07
13
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
COMMENT