Bridge Pattern

Muzi·2023년 5월 4일
0

디자인 패턴

목록 보기
6/14

요약

브릿지 패턴은 구현(implementation)으로부터 추상(abstraction) 레이어를 분리하여 이 둘이 서로 독립적으로 변화할 수 있도록 한다.

즉, 기능과 구현에 대해 두 개를 별도의 클래스로 구현 한다

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


Bridge Pattern


덕분에 이해가 쉬웠습니다 첨부합니다

  • Abstraction
    • 기능 계층의 최상위 클래스
    • 구현 부분에 해당하는 클래스 인스턴스를 가지고 구현 부분의 메서드를 호출한다
  • RefindAbstraction
    • 기능 계층에서 새로운 부분을 확장한 클래스
  • Implementor
    • Abstraction의 기능을 구현하기 위한 인터페이스
  • ConcreteImplementor
    - 실제 기능을 구현한다

with Java

아래 그림처럼 인터페이스, 구현 모두에 인터페이스 계층 구조가 있다고 가정하자

Shape의 구현체인 Triangle, Pentagon에서 다시 Color를 라는 추상층이 존재하는 이 상황은 코드의 독립적인 변형이 힘들고, 확장이 어렵다

  • 위 구조를 아래와 같이 Bridge Pattern을 통해 기능과 구현을 분리하자

Shape


package BridgePattern;
 
public abstract class Shape {
	// 구현
    // Shape와 Color(인터페이스)의 다리 역할
	protected Color color;
	
	public Shape(Color c){
		this.color=c;
	}
	
	abstract public void applyColor();
}
  • applyColor()는 추상 메서드
  • 구현부(Color)는 인터페이스로 모두 위임한다

Triangle, Pentagon

public class Triangle extends Shape{

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

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

}
public class Pentagon extends Shape{

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

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

}
  • applyColor()@Override
  • 메소드의 구현시 위임한 Color 인터페이스의 applyColor()

Color

public interface Color {

	public void applyColor();
}

Red, Green

public class RedColor implements Color{

	public void applyColor(){
		System.out.println("red.");
	}
}
public class GreenColor implements Color{

	public void applyColor(){
		System.out.println("green.");
	}
}

main

public static void main(String[] args) {
		Shape tri = new Triangle(new RedColor()); // 어떤 색을 사용할지 주입 
		tri.applyColor();
		
		Shape pent = new Pentagon(new GreenColor());
		pent.applyColor();
	}

어댑터 패턴과의 차이

우선 두 패턴 모두 Interface의 detail을 숨기는데는 구조적인 차이가 없다

그러나 목적의 차이가 있는데

  • 어댑터 패턴의 경우 이미 제공된 코드를 그대로 사용할 수 없을때, 필요한 형태로 변환한 후 이용하는 경우로, '이미 제공된 것'과 '필요한 것'사이의 '차이'를 메우는게 Adapter Pattern

  • 브릿지 패턴은 추상과 구현을 분리하는데 목적이 있다 = 덕분에 추상은 추상대로 구현은 구현대로 변경해도 서로 영향을 주지 않는다

어댑터는 기존코드를 필요한 형태로 변환을 위해, 브릿지는 확장성을 위해 미리 추상과 구현을 분리하는데 사용

Reference

https://www.crocus.co.kr/1537
https://beomseok95.tistory.com/257
https://m.blog.naver.com/tradlinx0522/220928963011
https://lktprogrammer.tistory.com/35

profile
좋아하는걸 열심히

0개의 댓글