인터페이스(Interface)

  • 클래스들이 구현해야 하는 동작(규격)을 지정하는데 사용되는 추상 자료형
  • 인터페이스는 상수, 추상 메서드, 디폴트 메서드, static 메서드를 가질 수 있음
  • 인터페이스를 구현하는 클래스를 구현클래스, 실제 메서드를 가지는 객체를 구현 객체라고 함

특징

  • 생성자가 없어서 객체 생성이 불가능
  • 자바 7까지는 추상 메서드만 가능, 자바 8부터는 디폴트메소드 및 정적메소드 가능
  • 데이터 저장이 불가능하므로 필드 선언이 불가능
  • 상수 필드만 선언가능 (public static final 생략 가능, 컴파일 과정에서 자동 첨가)
  • 추상 메서드 (public abstract 특성을 가짐(생략 가능, 컴파일과정에서 자동 첨가)
  • default 메서드는 public 특성을 가짐(생략 가능, 컴파일과정에서 자동 첨가)
  • static 메서드는 public 특성을 가짐(생략 가능, 컴파일과정에서 자동 첨가)
// 예제 1-1. RemoteControl.java
package com.jremind.exam03;

public interface RemoteControl {
	public int MAX_VOLUMN = 10;
	public int MIN_VOLUMN = 0;

	public void turnOn();
	public void turnOff();
	public void setVolumn(int volumn);

	default void setMute(boolean mute) {
		if(mute) {
			System.out.println("무음처리");
		}else {
			System.out.println("무음해제");
		}
	}

	static void changeBattery() {
		System.out.println("배터리 교환");
	}
}
// 예제 1-2. Television.java
package com.jremind.exam03;

public class Television implements RemoteControl{
	private int volumn;

	@Override
	public void turnOn() {
		// TODO Auto-generated method stub
		System.out.println("TV를 켭니다");

	}

	@Override
	public void turnOff() {
		// TODO Auto-generated method stub
		System.out.println("TV를 끕니다.");

	}

	@Override
	public void setVolumn(int volumn) {
		// TODO Auto-generated method stub
		if(volumn > RemoteControl.MAX_VOLUMN) {
			this.volumn = RemoteControl.MAX_VOLUMN;
		}else if(volumn < RemoteControl.MIN_VOLUMN) {
			this.volumn = RemoteControl.MIN_VOLUMN;
		}else {
			this.volumn = volumn;
		}

		System.out.println("현재 TV 볼륨: " + volumn);
	}
}
// 예제 1-3. Audio.java
package com.jremind.exam03;

public class Audio implements RemoteControl{
	private int volumn;
	private boolean mute;

	@Override
	public void turnOn() {
		// TODO Auto-generated method stub
		System.out.println("Audio를 켭니다.");

	}

	@Override
	public void turnOff() {
		// TODO Auto-generated method stub
		System.out.println("Audio를 끕니다.");

	}

	@Override
	public void setVolumn(int volumn) {
		// TODO Auto-generated method stub
		if(volumn > RemoteControl.MAX_VOLUMN) {
			this.volumn = RemoteControl.MAX_VOLUMN;
		}else if(volumn < RemoteControl.MIN_VOLUMN) {
			this.volumn = RemoteControl.MAX_VOLUMN;
		}else {
			this.volumn = volumn;
		}

		System.out.println("현재 Audio 볼륨: " + volumn);
	}

	@Override
	public void setMute(boolean mute) {
		// TODO Auto-generated method stub
		this.mute = mute;
		if(mute) {
			System.out.println("Audio 무음 처리");
		}else {
			System.out.println("Audio 무음 해제");
		}
	}
}
// 예제 1-4. TvMain.java
package com.jremind.exam03;

public class RemoteControlMain {
	public static void main(String[] args) {
		RemoteControl rc;

		rc = new Television();
		rc.turnOn();
		rc.turnOff();

		rc = new Audio();
		rc.turnOn();
		rc.setMute(true);
		rc.turnOff();

		RemoteControl.changeBattery();
	}
}