Adapter Pattern이란?

▶ 클래스의 인터페이스를 클라이언트가 원하는 형태의 또 다른 인터페이스로 변환. 어댑터는 호환되지 않는 인터페이스 때문에 동작하지 않는 클래스들을 함께 동작할 수 있도록 만들어준다.


코드 요약

▶ linux 환경에서 사용하는 LinuxCalculator와 window 환경에서 사용하는 WindowCalculator가 있다고 가정합니다. linuxCalculator는 덧셈만을 지원하고 windowCalculator는 뺄쎔만 지원합니다. CalculatorAdapter는 linux 환경에서 windowCalculator의 뺄셈 가능을 할 수 있게 해주는 역할을 하는 Adatepr입니다. 

 


클래스 다이어그램

 1. LinuxCalculator class

public class LinuxCalculator {

    public double execute(double n1, double n2){
        return n1+n2;
    }
}

2. WindowCalculator class

public class WindowCalculator {

    public double execute(double n1, double n2){
        return n1+n2;
    }
}

3. CalculatorAdapter class

public class CalculatorAdapter extends LinuxCalculator{
    private WindowCalculator calculator;


    public CalculatorAdapter(WindowCalculator calculator) {
        this.calculator = calculator;
    }

    @Override
    public double execute(double n1, double n2) {
        return calculator.execute(n1, n2);
    }
}

 

4. Main class


public class Main {
    public static void main(String[] args) {

        // linux 에서 사용하는 계산기
        LinuxCalculator linuxCalculator = new LinuxCalculator();
        double result1 = linuxCalculator.execute(1, 2);

        //window 에서 사용하는 계산기
        WindowCalculator windowCalculator = new WindowCalculator();
        double result2 = windowCalculator.execute(3, 4);


        // linux 환경에서 window 계산기를 쓰고싶어 어뎁터를 이용해서 변경
        LinuxCalculator calculatorAdapter = new CalculatorAdapter(windowCalculator);
        double result3 = calculatorAdapter.execute(5, 6);

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);


    }
}

 

이처럼 기존 시스템과 요구하는 API가 같지 않을 때 Adapter를 사용하여 중간 역할을 해주는 것을 Adapter Pattern이라고 합니다. 읽어주셔서 감사합니다.

전체 코드는 아래에서 확인 가능합니다:)

https://github.com/rlaehdals/design-pattern

 

GitHub - rlaehdals/design-pattern

Contribute to rlaehdals/design-pattern development by creating an account on GitHub.

github.com