티스토리 뷰

반응형

Adapter vs Bridge

Adapter 패턴과 Bridge 패턴은 둘다 다른 객체에 대한 직접 접근 대신에 다른 우회적 방법으로 접근함으로써 유연성을 증대시킨다.

 

두 패턴의 차이

  • 두 패턴의 가장 큰 차이는, 목적이 무엇인가?!
    • Adapter는 이미 존재하는 두 인터페이스간의 불일치를 해결하려는 것이다.
    • Bridge는 추상화 개념과 구현을 따로 만들고, 이들을 연결시키려는 것이 주 목적이다.
    • Adapter는 두 클래스간의 종속성을 미리 에측하지 못하고 개발했을 경우 필요한 패턴이다.
    • Bridge는 이미 사용자가 추상화 추상화 개념을 구현하는 방법이 여러가지이고 이들 각각이 독립적으로 진화할 수 있음을 파악한 상태에서 적용하는 패턴이다.

 

Adapter

  • 필요한 형태로 정해서 재활용한다.
  • Adapter Pattern == Wrapper Pattern
  • 무언가를 싸서 다른 용도로 사용할 수 있도록 교환해주는 것이다.
  • 기존의 클래스를 수정해서 필요한 클래스로 만든다.
    • 만약 버그가 발생해도, 기존 클래스에는 버그가 없기 때문에 Adapter 역할의 클래스를 중점적으로 조사만 함으로써 대응이 가능하여 프로그램 체크가 아주 간편해진다.
  • Ex. 우리 나라는 전기를 220v 사용하는데, 110v 사용하는 나라로 여행을 갈 때면 어댑터가 필요하다.
    • 이 처럼 어댑터 패턴도 마찬가지로, 자신의 설계는 그대로 사용하고 외부 라이브러리를 가져와 사용하고 싶을 때, 어댑터 패턴을 사용해서 중간에 변환을 시키는 것이다.
    • Ex. 우리가 사용하려고 하는 메소드는 methodB()인데, 우리는 methodA()를 호출해야한다고 해보자.
      • 이 때, 어댑터 객체는 methodA()를 제공하고 내부에서 methodB()를 호출해주면 되는 것이다.
        image
        • Adaptee는 변환되어야할 타깃 객체의 인터페이스를 포함하고 있다.
        • Client는 Adapter 객체의 methodA()만 호출하고 있다.
        • Adapter 객체는 내부(methodA())에서 Adaptee의 methodB()를 호출하고 있다.
        • 즉, Adapter 객체는 호출해야할 객체의 인터페이스를 중간에서 변경해주는 목적을 가지고 있는 것이다.

https://hamait.tistory.com/868

 

꼬리에 꼬리를 무는 - 유사 디자인 패턴들 - (1,2)

꼬리에 꼬리를 무는 - 유사 디자인 패턴들 (1/2편) 패턴을 공부하거나 할 때 UML 에 집중해서 공부하면 안된다고 생각한다. 구조만을 외우고 구조로 구분을 한 사람은 공부한것을 금방 까먹거나 헤깔려하기 쉽기..

hamait.tistory.com

 

Bridge

  • 기능의 계층과 구현의 계층을 분리한다.
  • '기능의 클래스 계층'과 '구현의 클래스 계층'사이에 다리를 놓는다.

 

  • Ex. 새로운 '기능'을 추가할 때
    • MyClass
      • MyClassSon
        • MyClassSonOfSon
    • 새로운 기능을 추가할 시 클래스 계층 안에서 새로 만들려고 하는 클래스와 유사한 클래스를 찾아내 하위 클래스를 만들어 기능을 추가한다.
    • 하지만 클래스 계층을 너무 깊게 하는 것은 가독성이 안 좋아질 수 있다.

 

  • Ex. 새로운 '구현'을 추가하고 싶을 때
    • AbstractClass
      • ConcreateClass
        • AnotherconcreateClass
    • 두개로 클래스 계층을 나눠두면 각각의 클래스 계층을 독립적으로 확장할 수 있다.
    • 이 때, 구현의 클래스 계층은 저녛 수정하지 않아도 된다. 게다가 새로 추가한 기능은 '모든 구현'에서 이용가능하다.
  • 상속은 견고한 연결, 위임은 느슨한 연결

 

 

Bridge 장점

  • 구현을 인터페이스에 완전히 결합시키지 않았기 때문에 구현과 추상화된 부분을 분리시킬 수 있다.
  • 추상화된 부분과 구현 부분을 독립적으로 확장시킬 수 있다.
  • 추상화된 부분을 구현 클래스에서 변경을 해도 클라이언트 쪽에는 영향을 끼치지 않는다.
  • 추상과 구현이 한 클래스에 같이 붙어있지 않고 분리하여 확장을 쉽게 하고 싶을 때 사용가능하다. 추상과 구현이 분리되어 결합도가 낮다
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함