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?