오늘은 자바에서의 브리지 디자인 패턴을 살펴보겠습니다. 인터페이스와 구현부에서 모두 인터페이스 계층이 있는 경우, 브리지 디자인 패턴은 인터페이스를 구현으로부터 분리하고 클라이언트 프로그램으로부터 구현 세부 사항을 숨기는 데 사용됩니다.
브리지 디자인 패턴
어댑터 패턴과 마찬가지로 브리지 디자인 패턴은 구조적 디자인 패턴 중 하나입니다. GoF에 따르면 브리지 디자인 패턴은 다음과 같습니다:
추상화와 구현을 분리하여 두 가지를 독립적으로 변화시키는 것입니다
브리지 디자인 패턴의 구현은 상속보다는 구성을 선호하는 개념을 따릅니다.
자바에서의 브리지 디자인 패턴 예시
브릿지 디자인 패턴을 예를 들어 설명하면 이해하기 쉽습니다. 아래 이미지와 같이 인터페이스와 구현체 모두에 대한 인터페이스 계층 구조가 있습니다.
이제 브릿지 디자인 패턴을 사용하여 인터페이스를 구현으로부터 분리해보겠습니다. 브릿지 패턴을 적용한 클래스와 인터페이스의 UML 다이어그램은 아래 이미지와 같습니다.
Shape
과 Color
인터페이스 사이의 브릿지와 구현에서의 합성을 주목해주세요. 다음은 Shape 인터페이스와 Color 인터페이스에 대한 자바 코드입니다. Color.java
package com.journaldev.design.bridge;
public interface Color {
public void applyColor();
}
Shape.java
package com.journaldev.design.bridge;
public abstract class Shape {
// 구성 - 구현자
protected Color color;
// 구현자를 입력 인수로 하는 생성자
public Shape(Color c){
this.color=c;
}
abstract public void applyColor();
}
아래는 삼각형 및 오각형 구현 클래스입니다. Triangle.java
package com.journaldev.design.bridge;
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Triangle filled with color ");
color.applyColor();
}
}
Pentagon.java
package com.journaldev.design.bridge;
public class Pentagon extends Shape{
public Pentagon(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Pentagon filled with color ");
color.applyColor();
}
}
빨간색과 초록색에 대한 구현 클래스는 다음과 같습니다. RedColor.java
package com.journaldev.design.bridge;
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
GreenColor.java
package com.journaldev.design.bridge;
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
테스트 프로그램으로 브릿지 패턴 구현을 테스트해봅시다. BridgePatternTest.java
package com.journaldev.design.test;
import com.journaldev.design.bridge.GreenColor;
import com.journaldev.design.bridge.Pentagon;
import com.journaldev.design.bridge.RedColor;
import com.journaldev.design.bridge.Shape;
import com.journaldev.design.bridge.Triangle;
public class BridgePatternTest {
public static void main(String[] args) {
Shape tri = new Triangle(new RedColor());
tri.applyColor();
Shape pent = new Pentagon(new GreenColor());
pent.applyColor();
}
}
위의 브릿지 패턴 예제 프로그램의 출력은 다음과 같습니다.
Triangle filled with color red.
Pentagon filled with color green.
{
“error”: “Upstream error…”
}
Source:
https://www.digitalocean.com/community/tutorials/bridge-design-pattern-java