Contents
인터페이스 (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(); } }
출력 결과
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fb1939378-3cd6-4f1f-9032-6c4df0711232%252F17b308d2-f130-4a87-90b1-4560fc8ac9a6%252FUntitled.png%3Ftable%3Dblock%26id%3D04a0da38-1754-43db-8b52-318b58eadeb3%26cache%3Dv2&w=3840&q=75)
인터페이스 예시 코드 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("회원가입 로직이 실행됩니다."); }); } }
출력 결과
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fb1939378-3cd6-4f1f-9032-6c4df0711232%252F37dd8c84-39a4-4fb5-a0ed-6d9e69f6cb9a%252FUntitled.png%3Ftable%3Dblock%26id%3D4c12b183-a21b-40b5-ace0-df1af48026fc%26cache%3Dv2&w=3840&q=75)
Share article