컴퓨터과학/0 + 소프트웨어 아키텍처(디자인 패턴)

[소프트웨어 아키텍처] 16. 브릿지 패턴(Bridge Pattern -java)

힘들면힘을내는쿼카 2022. 12. 9. 15:03
728x90
반응형

브릿지 패턴(Bridge Pattern)

 객체의 확장성을 향상하기 위한 패턴으로, 동작을 처리하는 구현부와 확장을 위한 추상부로 분리합니다.
즉, 구현과 더불어 추상화 부분까지 변경해야 한다면 브릿지 패턴을 사용하면 됩니다.! 🌉
브릿지 패턴을 사용하면 추상화된 부분과 구현 부분을 서로 다른 클래스 계층구조로 분리해서 그 둘을 모두 변경할 수 있습니다.

여러 플랫폼에서 사용해야 하는 그래픽스와 윈도우 처리 시스템에서 유용하게 사용됩니다.
다시말하면, 인터페이스와 실제 구현할 부분을 서로 다른 방식으로 변경해야 할 때 유용하게 사용됩니다.

브릿지 패턴 구조

  • Abstraction
    • 기능 계층의 최상위 클래스
  • ConcreteAbstraction
    • 기능 계층에서 새로운 부분을 확장한 클래스
  • Implementor
    • abstract 기능을 구현하기 위한 인터페이스
  • ConcrteImplementor
    • 실제 기능 구현
728x90

애플워치 밴드 교체 애플리케이션

애플워치는 밴드를 사용자의 취향에 따라 교체할 수 있습니다.!
브릿지 패턴을 사용해서 이를 구현해 봅시다.!

사진 출처 : Apple (대한민국)

 

 

 

2개의 계층구조를 만들었습니다. 한쪽은 실리콘밴드(SiliconBand), 한쪽은 알파인루프(AlpineLoop) 입니다.
브릿지로 연결했으므로 양쪽을 서로 독립적으로 변경할 수 있습니다..!!

AppleWatch

public abstract class AppleWatch {
    protected WatchBand watchBand;

    public abstract void changeBand(WatchBand watchBand);
}

Se2

public class Se2 extends AppleWatch {

    private static final String name = "se2";

    @Override
    public void changeBand(WatchBand watchBand) {
        this.watchBand = watchBand;
        System.out.println(name+" "+this.watchBand.bandName()+"로 밴드 변경합니다.");
    }
}

Series8

public class Series8 extends AppleWatch {

    private static final String name = "시리즈8";

    @Override
    public void changeBand(WatchBand watchBand) {
        this.watchBand = watchBand;
        System.out.println(name+" "+this.watchBand.bandName()+"로 밴드 변경합니다.");
    }
}

WatchBand

public interface WatchBand {
    String bandName();
}

AlpineLoop

public class AlpineLoop implements WatchBand {

    private static final String name = "알파인 루프";

    @Override
    public String bandName() {
        return name;
    }
}

SiliconBand

public class SiliconBand implements WatchBand {

    private static final String name = "실리콘 밴드";

    @Override
    public String bandName() {
        return name;
    }
}

Client

public class Client {
    public static void main(String[] args) {
        WatchBand alpineLoop = new AlpineLoop();
        WatchBand siliconBand = new SiliconBand();
        AppleWatch MyappleWatch = new Series8();
        AppleWatch YourappleWatch = new Se2();

        YourappleWatch.changeBand(alpineLoop);
        MyappleWatch.changeBand(siliconBand);

        YourappleWatch.changeBand(siliconBand);
        MyappleWatch.changeBand(alpineLoop);
    }
}

결과

se2 알파인 루프로 밴드 변경합니다.
시리즈8 실리콘 밴드로 밴드 변경합니다.
se2 실리콘 밴드로 밴드 변경합니다.
시리즈8 알파인 루프로 밴드 변경합니다.
반응형

브리지패턴의 장단점

장점

  • 구현과 인터페이스를 완전히 결합하지 않았기에 구현과 추상화 부분을 분리할 수 있습니다.
  • 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있습니다.
  • 추상화 부분을 구현한 구상 클래스가 변경되어도 클라이언트에는 영향을 끼치치 않습니다.!

단점

  • 디자인이 복잡해진다는 단점이 있습니다.
728x90
반응형