개발 etc

JAVA 자바 어댑터 패턴(Adapter Pattern)

알통몬_ 2017. 3. 12. 20:49
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

어댑터 패턴은 OCP 개방폐쇄원칙을 활용한 설계 패턴입니다.


먼저 어댑터 패턴이 활용되지 않은 예제입니다.


예제)

ServiceA.java

package adapterPattern;


public class ServiceA {

void runServiceA() {

System.out.println("ServiceA");

}

}


ServiceB.java

package adapterPattern;


public class ServiceB {

void runServiceB() {

System.out.println("ServiceB");

}

}


ClientWithNoAdapter.java

package adapterPattern;


public class ClientWithNoAdapter {

public static void main(String[] args) {

ServiceA sa1 = new ServiceA();

ServiceB sb1 = new ServiceB();


sa1.runServiceA();

sb1.runServiceB();

}

}


main()메서드를 보면 sa1 참조변수와 sb1 참조변수를 통해 호출하는 

각 메서드가 비슷한 일을 하지만 메서드 명이 다른 것을 볼 수 있습니다. 


그렇다면 어댑터 패턴을 적용한 예제를 보겠습니다.

기존의 ServiceA.java 와 ServiceB.java는 그대로 사용합니다.

예제)

AdapterServicA.java

package adapterPattern;


public class AdapterServicA {

ServiceA sa1 = new ServiceA();


void runService() {

sa1.runServiceA();

}

}


AdapterServicB.java

package adapterPattern;


public class AdapterServicB {

ServiceB sb1 = new ServiceB();


void runService() {

sb1.runServiceB();

}

}


ClientWithAdapter.java

package adapterPattern;


public class ClientWithAdapter {

public static void main(String[] args) {

AdapterServicA asa1 = new AdapterServicA();

AdapterServicB asb1 = new AdapterServicB();


asa1.runService();

asb1.runService();

}

}

AdapterServicA.java

AdapterServicB.java는 기존의 ServiceA 와 ServiceB의 메서드를 

service()라고 하는 같은 이름의 메서드로 호출해서 사용할 수 있게 해주는 변환기 입니다. 


ClientWithAdapter가 변화기를 통해 service()라는 동일한 메서드 명으로 두 객체의 메서드를 호출합니다.

 어댑터 패턴은 합성, 객체를 속성으로 만들어서 참조하는 디자인 패턴이에요. 

한마디로 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 

중간에 변환기를 통해 호출하는 패턴입니다.

반응형