개발 알다가도 모르겠네요

Adapter Pattern을 알아보자 본문

디자인패턴

Adapter Pattern을 알아보자

이재빵 2021. 12. 24. 02:22
728x90

 

클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴

 

호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줍니다.

 

 

Example 

public interface Adder {
	public int plus(int x, int y);
}

public class MyAdder implements Adder {
	@Override
	public int plus(int x, int y) {
    	return x + y;
        }
    }
    
public class UseAdder {
	public int add(Adder adder, int x, int y) {
    	int r = 0;
        r = adder.plus(x, y);
        return r;
        }
     }

public class Main {
	public static void main(String[] args) {
    	Adder adder = new MyAdder();
        UseAdder use = new UseAdder();
        System.out.println(use.add(adder, 10, 20));
        }
   }

 

제약조건

-특정 회사에서 제공하는 Adder(eg. YourAdder) 사용해야 하고 라이브러리 형태로 제공되어 수정 할 수 없음

-클라이언트 코드도 수정할 수 없음.

 

예를 들어 아래처럼 YourAdder 라는 라이브러리가 제공된다고 가정할 때, 

사용 인터페이스 (Adder 인자 2개) 와 제공 인터페이스 (YourAdder 인자 3개)가 불일치하게 됩니다.

따라서 둘 사이에 호환되는 adapter가 필요합니다.

 

 

public class YourAdder {
	public int add3(int x, int y, int z){
    	return x+y+z;
        }
}

public class YourAdderAdapter implements Adder {
	private YourAdder yourAdder;
    public YourAdderAdapter(YourAdder yourAdder) {
    	this.yourAdder = yourAdder;    
        }    
    @Override
    public int plus(int x, int y) {
    	return yourAdder.add3(x, y, 0);
        }
}
    

public class Main {
	public static void main(String[] args) {
    	Adder adder = new MyAdder();
        UseAdder use = new UseAdder();
        System.out.println(use.add(adder, 10, 20));
        Adder adder1 = new YourAdderAdapter(new YourAdder());
        System.out.println(use.add(adder1, 10, 20));    }
}