인터페이스 (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