이번엔 브릿지 패턴! 힘내..! 아직 할께 많아...! 하핳하하하하하ㅏ....
Bridge Pattern?
Bridge는 다리라는 뜻! 위 그림과 같이 떨어져있는 두 장소를 이어주는 역할을 한다!
Bridge Pattern도 두 장소를 연결하는 역할을 한다!
<Bridge>
기능 클래스 계층 ll ================== ll 구현 클래스 계층
- 구현부(Implementation)에서 추상층(abstraction)을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록하는 패턴!
- 기능 클래스 계층과 구현 클래스 계층을 연결해주는 패턴
<기능 클래스 계총?>
A라는 상위 클래스를 상속 받는 B라는 하위 클래스에서 새로운 기능을 추가하는 계층
<구현 클래스 계층?>
A라는 인터페이스(API)를 구현한 B라는 객체가 존재할 때 구현 클래스 계층이라고 말한다.
말이 어렵군! 모르겠는건 그림으로 보자! ㅋㅋ
[구조]
Abstraction (추상화)
- 기능 클래스 계층의 상위 클래스 인터페이스를 정의함
- 기본 기능만 정의 되어 있다.
Refined Abstraction (개선된 추상화) 이상화 선수님 말고~ 추상화~
- 기능 클래스 계층의 하위 클래스
- 기능을 추가한 역할
Implementor (구현자)
- 구현 클래스 계층의 상의 클래스
- 인터페이스(API)를 규정한다!
Concrete Implementor(구체적인 구현자)
- 구현 클래스 계층의 하위 클래스
- 인터페이스를 (API) 정의한다!
밑의 구조로 구현을 할 예정이다.
[구현]
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://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
** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.
이곳 저곳에서 구글링한 것과 강의 들은
내용이 정리가 되었습니다.
그림들은 그림밑에 출처표시를 해놓았습니다.
문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **
'public void static main > Etc' 카테고리의 다른 글
[Swagger] 스웩! 췤! (0) | 2022.01.29 |
---|---|
[Redis] Redis란? (0) | 2021.11.18 |
[Design Pattern] Decorator Pattern (0) | 2021.11.16 |
[Design Pattern] Facade Pattern (0) | 2021.11.11 |
[Design Pattern] Adapter Pattern (0) | 2021.11.10 |
댓글