브릿지 패턴

반응형
반응형

디자인 패턴을 공부하면서 놓쳐서면 안되는 사실은 절대로 코드로 학습을 하면 안된다는 사실이다.
나는 브릿지 패턴을 공부하면서 이에 더 실감했다.
물론, 코드 자체도 디자인 패턴이지만 사실 그것 보다 중요한 건 어떻게 그 코드를 작성했는가가 중요하다.
인터페이스를 사용하고 클래스를 사용하는 건 그렇게 까지 중요한건 아니다.

아무튼 지금 내가 작성 하는 부분은 브릿지 패턴이다.
브릿지는 다리라는 뜻이다.
즉, 코드 상에서 다리를 내려줘야 하는데 어떤걸로 하는 것이 유리할까?
클래스로 해도 상관없고 인터페이스로 해도 상관없다.

UML을 보면 인터페이스로 되어있는데 이는 사실 인터페이스

interface

이게 아니다. 그냥 추상적으로 표현 할 수 있다는 뜻이다.

저번 포스팅에서 전략 패턴에 대해 공부하였다.

전략 패턴과 비교해보면 재밌는 것을 찾을 수 있다.  (다른 패턴도 상관없다.)
보면 매우 유사하다는 것을 느낄 수 있다.

일단 GOF에 정의에 따르면
구현부와 추상층을 분리한 구조적(Structure) 디자인 패턴이라고 한다.

이번에는 특이하게 UML을 가져와보자.

기선님 강의를 듣고 와서 그런지 머릿속에는 계속 롤이 생각난다. ㅜㅜ
그래서 이번에도 특수한 예제 없이 설명하려 한다.

코드

public interface Template {
  String getName();
}

여기 템플릿 코드가 존재한다.
확인을 해보면 이름을 리턴한다.

UML을 보면 이것에 대한 구현체를 만들라고 한다.
만들자.

public class TemplateUser implements Template{

  @Override
  public String getName() {
    return "user";
  }
}

Abstraction을 보면 추상체를 조합해서 사용되고 있다.

public class MainTemp {
  public String function(Template template) {
    return template.getName();
  }
}

이 코드 어디서 많이 보지 않았나?
맞다. 이 코드는 전략 패턴에서 봤던 그 코드다.
이것을 그냥 이렇게 사용하면 된다.

public class Main {

  public static void main(String[] args) {
    MainTemp temp = new MainTemp();
    String user = temp.function(new TemplateUser());
    System.out.println(user);
  }
}

근데 client 코드를 제외하고도 클래스는 4개가 나와야 하는데 refinedAbstraction을 구현하지 않았다.
개인적으로 이것도 브릿지 패턴이라 생각하는데 뭐 굳이 비유하면 끊어진 다리라고 할까나

public class UserTemp extends MainTemp{

  @Override
  public String function(Template template) {
    return template.getName();
  }
}

요렇게 하면 브릿지 패턴을 만족하는 코드가 완성되었다.

그러면 이 코드의 장점에 대해 물어보면

public class Main {

  public static void main(String[] args) {
    MainTemp temp = new UserTemp();
    String user = temp.function(new TemplateGroup());
    System.out.println(user);
  }
}

이 코드로 대체한다.

많은 블로그에서 어뎁터 패턴과 비교 하는데 나는 특이하게 전략 패턴과 비교했다.
그 이유는 누가 봐도 다른 패턴이지만 코드만 봤을때는 이게 무슨 패턴을 사용했는지 확신을 가질 수 없기 때문이다.

근데 그래서 이게 브릿지 패턴이냐고?
그건 나도 잘 모르겠는데 GOF 패턴을 보면 이게 왜 이름일까라는게 생각보다 많은 것 같다.

아무튼 브릿지다. 아무튼 아무튼 다리

 

'디자인패턴' 카테고리의 다른 글

브릿지 패턴  (0) 2021.11.25
전략 패턴  (0) 2021.11.19
팩토리 메소드 패턴 vs 추상 팩토리 패턴  (0) 2021.11.11
싱글톤 패턴  (0) 2021.11.03
탬플릿 패턴  (0) 2020.06.05
빌더 패턴  (0) 2020.05.27

댓글(0)

Designed by JB FACTORY