본문 바로가기
public void static main()/Design Pattern

[Design Pattern] Bridge Pattern

by 햄리뮤 2021. 11. 16.
반응형

이번엔 브릿지 패턴! 힘내..! 아직 할께 많아...! 하핳하하하하하ㅏ....

https://refactoring.guru/design-patterns/bridge

Bridge Pattern?

Bridge는 다리라는 뜻! 위 그림과 같이 떨어져있는 두 장소를 이어주는 역할을 한다!

Bridge Pattern도 두 장소를 연결하는 역할을 한다!

                                    <Bridge>

기능 클래스 계층 ll ================== ll 구현 클래스 계층

 

  • 구현부(Implementation)에서 추상층(abstraction)을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록하는 패턴!
  • 기능 클래스 계층과 구현 클래스 계층을 연결해주는 패턴

<기능 클래스 계총?>

A라는 상위 클래스를 상속 받는 B라는 하위 클래스에서 새로운 기능을 추가하는 계층

 

<구현 클래스 계층?>

A라는 인터페이스(API)를 구현한 B라는 객체가 존재할 때 구현 클래스 계층이라고 말한다.

 

말이 어렵군! 모르겠는건 그림으로 보자! ㅋㅋ

https://refactoring.guru/design-patterns/bridge

[구조]

Abstraction (추상화)

  • 기능 클래스 계층의 상위 클래스 인터페이스를 정의함
  • 기본 기능만 정의 되어 있다.

Refined Abstraction (개선된 추상화)   이상화 선수님 말고~ 추상화~

  • 기능 클래스 계층의 하위 클래스
  • 기능을 추가한 역할

 

Implementor (구현자)

  • 구현 클래스 계층의 상의 클래스
  • 인터페이스(API)를 규정한다!

Concrete Implementor(구체적인 구현자)

  • 구현 클래스 계층의 하위 클래스
  • 인터페이스를 (API) 정의한다!

https://refactoring.guru/design-patterns/bridge

밑의 구조로 구현을 할 예정이다.

https://beomseok95.tistory.com/257

[구현]

Implementor 

package bridgePattern;

public interface Color {
  void applyColor();
}

Abstraction 

package bridgePattern;
/*
Shape 클래스가 Color 인터페이스를 소유하고 있고, applyColor() 메소드는 abstract로 선언하여
하위 클래스에게 구현을 위임한다.
 */
public abstract class Shape {
  // Composition
  protected Color color;

  // constructor with implementor as input argument
  public Shape(Color color) {
    this.color = color;
  }

  abstract public void applyColor();
}

Refined Abstraction

package bridgePattern;
/*
Shape 추상 클래스를 상속하여 구체화 하는 Triangle 클래스와 Pentagon 클래스를 정의해보쟈
 */
public class Pentagon extends Shape{

  public Pentagon(Color color) {
    super(color);
  }

  @Override
  public void applyColor() {
    System.out.println("Pentagon filled with color");
    color.applyColor();
  }
}

Refined Abstraction

package bridgePattern;

public class Triangle extends Shape{


  public Triangle(Color color) {
    super(color);
  }

  @Override
  public void applyColor() {
    System.out.println("Triangle filled with color");
    color.applyColor();
  }
}

Concrete Implementor

package bridgePattern;
/*
Shape 클래스가 소유할 Color 인터페이스의 구현 객체를 정의해보자
 */
public class RedColor implements Color{

  @Override
  public void applyColor() {
    System.out.println("Red");
  }
}

Concrete Implementor

package bridgePattern;

public class GreenColor implements Color {

  @Override
  public void applyColor() {
    System.out.println("Green");
  }
}

실행

package bridgePattern;

public class BridgePatternApplication {
  public static void main(String[] args) {
    Shape triangle = new Triangle(new RedColor());
    triangle.applyColor();

    Shape pentagon = new Pentagon(new GreenColor());
    pentagon.applyColor();
  }
}

결과 

[사용이유]

추상화(abstraction)와 구현(Implement)이 독립적으로 다른 계층 구조를 가질 수 있고, 클라이언트 어플리케이션으로부터 구현을 숨기고 싶을 때 사용될 수 있다.

  • 두 계층을 분리함으로 써 확장이 편리해진다.
  • 서로 변경이 되어도 클라이언트 쪽에는 영향이 없다.

 

[정리]

분리해 두면 편해진다

  • 기능의 클래스 계층과 구현의 클래스 계층을 분리하는 것이다.
  • 각의 클래스 계층을 독립적으로 확장할 수 있다.

상속은 견고한 연결이고 위임은 느슨한 연결이다.

  • 상속은 클래스를 확장하기 위해 편리한 방법이지만 클래스간의 연결을 강하게 고정시킨다.
  • 프로그램을 필요에 따라서 클래스간의 관례를 바꾸고 싶을 때는 상속이 아니라 위임을 이용하자!

https://refactoring.guru/design-patterns/bridge

 

아~~ 내자신 진짜 수고했따 마지막에 졸려서 급하게 마무리한거 같지만 기분탓이야~

오늘도 저를 공부시켜 주신 인터넷 멘토분들 진짜 감사하다요!!! 내맘 알죠~!!?

 

 

https://dejavuhyo.github.io/posts/bridge-pattern/

 

Bridge Pattern

1. Bridge 패턴이란 Bridge 패턴이 다리 역할을 하고 있는 두 곳은 ‘기능의 클래스 계층’과 ‘구현의 클래스 계층’이다.

dejavuhyo.github.io

https://beomseok95.tistory.com/257

 

[Design Pattern] Bridge Pattern

[Design Pattern] Bridge Pattern Bridge Pattern이란? 추상화를 구현하여 두 개가 독립적으로 변할 수 있도록 브리지 디자인 패턴의 구현은 Composition 보다 Inheritance을 선호한다는 개념을 따릅니다. 브리지..

beomseok95.tistory.com

https://readystory.tistory.com/194

 

[구조 패턴] 브릿지 패턴(Bridge Pattern) 이해 및 예제

브릿지 패턴(Bridge Pattern)은 Flyweight 패턴, Adapter 패턴, Decorator 패턴처럼 구조 패턴 중 하나로, 두 인터페이스에 계층 구조(Hierarchy)를 가지고 있을 때 인터페이스를 구현(implements)으로부터 분리하..

readystory.tistory.com

https://lee1535.tistory.com/102

 

[디자인패턴/Design Pattern] Bridge Pattern / 브리지 패턴

관련 내용은 [자바 언어로 배우는 디자인 패턴 입문] , [Head First Design Pattern] 의 내용을 참고해서 정리한 내용입니다. 잘못된 부분은 댓글로 피드백 부탁드립니다. 1. Bridge 패턴이란? '기능 클래스

lee1535.tistory.com

https://m.blog.naver.com/tradlinx0522/220928963011

 

[디자인 패턴] Bridge 패턴 (기능계층과 구현계층 분리하기)

[참고] JAVA 언어로 배우는 디자인 패턴 입문 안녕하세요. 물류 플랫폼 트레드링스 개발팀 양갱 입니다...

blog.naver.com

https://lktprogrammer.tistory.com/35

 

07 브릿지 패턴 (Bridge Pattern)

브릿지 패턴 (Bridge Pattern) 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 합니다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 합니다. ■ 브

lktprogrammer.tistory.com

** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의 들은

내용이 정리가 되었습니다.

그림들은 그림밑에 출처표시를 해놓았습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

댓글