6.어뎁터패턴과 추상클래스 및 인터페이스

강재영's avatar
Aug 13, 2024
6.어뎁터패턴과 추상클래스 및 인터페이스
 
💡
서로 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간에 어댑터를 두어 인터페이스를 변환해주는 패턴입니다. 이 패턴을 사용하면 기존 클래스를 수정하지 않고도 새로운 인터페이스로 활용할 수 있습니다.
 
notion image
 
발전소에서 보내는 전력은 220v이지만 컴퓨터가 쓰는 전력은 5v이다 그러니 중간에 어댑터를 두어 변환해야한다.
 
 
notion image
 
고칠 수 없는 외부라이브러리에서 내가 필요한 데이터를 어뎁터페턴으로 가져와서 사용
 
package ex03.sample; interface mouse{ void click(); void doubleClick(); void mouseend(); void mouseEnter(); } abstract class mouserAdater implements mouse{ //click 클래스는 적지 않음 //doublce메서드는 추상메서드로 등록함 @Override public abstract void doubleClick(); @Override public void mouseend() { System.out.println("Adater추상클래스에서 구현해버림"); } @Override public void mouseEnter() { } } class myMouse extends mouserAdater{ @Override public void click() { System.out.println("추상메서드에서 구현하지 않았으니 구현하지 않으면 컴파일에러"); } @Override public void doubleClick() { System.out.println("인터페이스를 상속받은 추상클래스에서 추상메서드로 등록했으니 당연히 구현하지 않으면 컴파일에러"); } @Override public void mouseEnter() { System.out.println("기본(빈) 구현체로 등록이 되어서 구현을 하지 않아도 되지만 오버라이딩해서 등록가능"); } } public class test { public static void main(String[] args) { myMouse my1 = new myMouse(); my1.click(); my1.doubleClick(); my1.mouseEnter(); my1.mouseend(); } }
 
인터페이스에 메서드들은 전부 추상메서드이다.
그렇기에 구현을 해야하는데 이 인터페이스를 상속받는 일반클래스라면 모든 메서드들을 모두 구현해야하지만 위 코드처럼 추상클래스라면 그다음 구현체가 구현하도록 할 수 있다.
 

인터페이스와 추상클래스

  • 인터페이스
    • 인터페이스는 추상 메서드만을 포함하는 일종의 계약(Contract)입니다.
    • 모든 메서드는 암묵적으로 public abstract이며, 구현을 가지지 않습니다.
    • 인터페이스 자체는 추상 클래스가 아니지만, 인터페이스에 선언된 메서드는 모두 구현되지 않은 상태이므로, 이를 구현하는 클래스에서 반드시 구현해야 합니다.
  • 추상클래스
    • 추상 클래스는 구현이 포함될 수도 있고, 포함되지 않을 수도 있는 클래스입니다. 추상 클래스는 일부 메서드를 구현하거나, 아예 구현하지 않고 추상 메서드로 남겨둘 수 있습니다.
    • 추상 클래스는 abstract 키워드를 사용하여 선언됩니다.
    • 추상 클래스를 상속하는 클래스는 추상 메서드를 반드시 구현해야 합니다.
 
Share article

강재영 블로그