Adapter Pattern

Adapter Pattern์ ํ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ํฐ ํจํด์ ์ด์ฉํ๋ฉด ์ธํฐํ์ด์ค ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ ํด๋์ค๋ค์ ๊ฐ์ด ์ธ ์ ์๋ค.
Adapter Pattern์ ๊ตฌ์กฐ ํจํด์ผ๋ก ์ธํฐํ์ด์ค๋ ๊ตฌํ์ ๋ณตํฉํ๋ ๊ฒ์ด ์๋, ๊ฐ์ฒด๋ฅผ ํฉ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ์ด๋ ์ปดํ์ผ ๋จ๊ณ์์๊ฐ ์๋ ๋ฐํ์ ๋จ๊ณ์์ ๋ณตํฉ ๋ฐฉ๋ฒ์ด๋, ๋์์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ ์์ ์ ์ฐ์ฑ์ ๊ฐ์ง๋ค.
์ด๋ํฐ ํจํด์ Class Adapter์ Object Adapter ๋ฐฉ์์ด ์๋ค.
Class Adapter : ์๋ฐ ์์(inheritance)์ ์ด์ฉํ ๋ฐฉ๋ฒ
Object Adapter : ์๋ฐ ํฉ์ฑ(Composite)์ ์ด์ฉํ ๋ฐฉ๋ฒ
์์
volt ๊ฐ์ ๊ฐ์ง๊ณ ์๋ POJO ํด๋์ค
public class Volt {
private int volts;
public Volt(int v){
this.volts=v;
}
public int getVolts() {
return volts;
}
public void setVolts(int volts) {
this.volts = volts;
}
}
Socket : 120 Volt ์์ฑ ํด๋์ค
public class Socket {
public Volt getVolt(){
return new Volt(120);
}
}
120 ๋ณผํธ ์ธ์ ์ถ๊ฐ์ ์ผ๋ก 3, 12 volt๋ ์ถ๊ฐ๋ก ์์ฑํ๋ ์ด๋ํฐ
public interface SocketAdapter {
public Volt get120Volt();
public Volt get12Volt();
public Volt get3Volt();
}
Class Adapter ๋ฐฉ์
public class SocketClassAdapterImpl extends Socket implements SocketAdapter{
@Override
public Volt get120Volt() {
return getVolt();
}
@Override
public Volt get12Volt() {
Volt v= getVolt();
return convertVolt(v,10);
}
@Override
public Volt get3Volt() {
Volt v= getVolt();
return convertVolt(v,40);
}
private Volt convertVolt(Volt v, int i) {
return new Volt(v.getVolts()/i);
}
}
Object Adapter ๋ฐฉ์
public class SocketObjectAdapterImpl implements SocketAdapter{
//Using Composition for adapter pattern
private Socket sock = new Socket();
@Override
public Volt get120Volt() {
return sock.getVolt();
}
@Override
public Volt get12Volt() {
Volt v= sock.getVolt();
return convertVolt(v,10);
}
@Override
public Volt get3Volt() {
Volt v= sock.getVolt();
return convertVolt(v,40);
}
private Volt convertVolt(Volt v, int i) {
return new Volt(v.getVolts()/i);
}
}
main
public static void main(String[] args) {
// object adapter
SocketAdapter sockAdapter = new SocketObjectAdapterImpl();
Volt v3 = sockAdapter.get3Volt();
Volt v12 = sockAdapter.get12Volt();
Volt v120 = sockAdapter.get120Volt();
// class adapter
SocketAdapter sockAdapter = new SocketClassAdapterImpl();
Volt v3 = sockAdapter.get3Volt();
Volt v12 = sockAdapter.get12Volt();
Volt v120 = sockAdapter.get120Volt();
}
์ฐธ๊ณ
Last updated
Was this helpful?