인터페이스 (Interface)
- 먼저 행동을 정의하고 그 행동을 구현하는 클래스를 만드는 것이다.
- 클래스가 반드시 구현해야 하는 메소드들을 정의한다.
- 어떤 동작을 하든 ‘강제화’ 시켜 일관성과 안정성을 보장한다.
- interface 를 사용하여 선언하고 implements를 사용하여 상속한다.
- has-a 관계(composition)를 통해 클래스가 여러 인터페이스를 동시에 구현할 수 있습니다. → 다중 상속이 가능하다.
- 오브젝트가 아니다. → new가 불가능하다.
인터페이스는 객체가 아니라,
클래스나 다른 인터페이스가 구현해야 하는 메소드들을 정의합니다.
따라서 인터페이스는 구현체 없이는 사용할 수 없습니다.
프로토콜 VS 인터페이스!
둘 다 약속을 의미하지만,
’프로토콜’은 양쪽이 협의하여 결정하는 수평적인 관계를 의미하고,
’인터페이스’는 한 쪽이 결정하는 수직적인 관계를 의미한다.
추상 클래스 VS 인터페이스
인터페이스 예시 코드 1
package ex07.example;
interface Remocon {
void on();
void off();
}
class SamsungRemocon implements Remocon {
@Override
public void on() {
System.out.println("삼성 리모컨 on");
}
@Override
public void off() {
System.out.println("삼성 리모컨 off");
}
}
class LgRemocon implements Remocon {
@Override
public void on() {
System.out.println("LG 리모컨 on");
}
@Override
public void off() {
System.out.println("LG 리모컨 off");
}
}
/**
* 작성자 : 홍길동
* 날짜 : 2023.12.26
* 구현체 : SamsungRemocon, LgRemocon
*/
class CommonRemocon {
private Remocon r; // 인터페이스 or 추상클래스
public CommonRemocon(Remocon r) {
this.r = r;
}
public void on() {
r.on();
}
public void off() {
r.off();
}
}
public class InterEx01 {
public static void main(String[] args) {
CommonRemocon cr = new CommonRemocon(new SamsungRemocon());
cr.on();
}
}
출력 결과

인터페이스 예시 코드 2
package ex07.example;
// 라이브러리 판매
interface EventListener {
void action();
}
// 라이브러리 판매
class myApp {
public void click(EventListener l) {
l.action();
}
}
public class InterEx02 {
public static void main(String[] args) {
myApp app = new myApp();
app.click(() -> {
System.out.println("회원가입 로직이 실행됩니다.");
});
}
}
출력 결과

Share article