서로 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간에 어댑터를 두어 인터페이스를 변환해주는 패턴입니다. 이 패턴을 사용하면 기존 클래스를 수정하지 않고도 새로운 인터페이스로 활용할 수 있습니다.

발전소에서 보내는 전력은 220v이지만 컴퓨터가 쓰는 전력은 5v이다 그러니 중간에 어댑터를 두어 변환해야한다.

고칠 수 없는 외부라이브러리에서 내가 필요한 데이터를 어뎁터페턴으로 가져와서 사용
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