어댑터 패턴

이원찬·2024년 5월 30일

디자인 패턴

목록 보기
2/4

어댑터를 번역하면 변환기 이다

어댑터는

두 인터페이스 사이의 통신을 가능하게 하는 것 (래핑하여)

⇒ 호환되지 않는 인터페이스들을 연결하는 디자인 패턴

상황

Circle circle = new Circle(3);
Rectangle rectangle = new Rectangle(3);

circle.getRadius();
// rectangle.getRadius() ??

위 코드를 보자 사각형한테서 반지름을 얻어오려 하고있다…

직사각형엔 반지름이 없다.. 하지만 사각형 대각선의 절반이 반지름이라 약속한다면….

클라이언트는 직사각형이 원 인줄 알고 사용하지 않을까…?

어댑터 패턴 코드

public class RectangleAdapter extends Circle {

    private Rectangle rectangle;

    public RectangleAdapter(Rectangle rectangle) {
        this.rectangle = rectangle;
    }

    @Override
    public int getRadius() {
        return (int) (rectangle.getWidth() * Math.sqrt(2) / 2);
    }
}
Circle circle1 = new Circle(3);
Circle circle2 = new RectangleAdapter(new Rectangle(3));

circle1.getRadius();
circle2.getRadius();

위처럼 통신이 불가능했던 클래스 또는 인터페이스를 래핑하여 통신이 가능케 하는 패턴을 어댑터 패턴이라 한다.

참고문헌
https://refactoring.guru/ko/design-patterns/adapter

profile
소통과 기록이 무기(Weapon)인 개발자

0개의 댓글