036_인터페이스

Dec 26, 2023
036_인터페이스

인터페이스 (Interface)

  • 먼저 행동을 정의하고 그 행동을 구현하는 클래스를 만드는 것이다.
  • 클래스가 반드시 구현해야 하는 메소드들을 정의한다.
  • 어떤 동작을 하든 ‘강제화’ 시켜 일관성과 안정성을 보장한다.
  • interface 를 사용하여 선언하고 implements를 사용하여 상속한다.
  • has-a 관계(composition)를 통해 클래스가 여러 인터페이스를 동시에 구현할 수 있습니다.다중 상속이 가능하다.
  • 오브젝트가 아니다. → new가 불가능하다.
인터페이스는 객체가 아니라, 클래스나 다른 인터페이스가 구현해야 하는 메소드들을 정의합니다. 따라서 인터페이스는 구현체 없이는 사용할 수 없습니다.
프로토콜 VS 인터페이스! 둘 다 약속을 의미하지만, ’프로토콜’은 양쪽이 협의하여 결정하는 수평적인 관계를 의미하고, ’인터페이스’는 한 쪽이 결정하는 수직적인 관계를 의미한다.

추상 클래스 VS 인터페이스

추상 클래스 (Abstract Class)

  • 이미 존재하는 클래스들의 공통된 부분을 일반화하여 상위 클래스를 만드는 것이다. → 바텀업
  • 공통된 속성이나 메서드를 추상 클래스에 정의하고, 구체적인 구현은 하위 클래스에 맡긴다. 이를 통해 코드의 중복을 줄이고 유지보수를 용이하게 한다.
 

인터페이스 (Interface)

  • 먼저 행동을 정의하고 그 행동을 구현하는 클래스를 만드는 것이다. → 탑다운
  • 인터페이스는 클래스가 어떤 메소드를 반드시 구현해야 하는지를 지정하여 일관성과 안정성을 보장한다. 다중 상속이 가능하므로 여러 인터페이스를 동시에 구현할 수 있고, 특정 동작을 강제화할 수 있다.

인터페이스 예시 코드 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
인터페이스 예시 코드 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
 
Share article
RSSPowered by inblog