06.인터페이스(Interface)
by SANGGI JEON
인터페이스(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();
}
}
Subscribe via RSS