✍️ 브릿지 패턴, 소개
브릿지 패턴은 하나의 클래스로부터 파생되는 두 가지 개념을 분리하여 각각을 독립적으로 확장하고, 이를 두 개의 컴포넌트로 결합하는 디자인 패턴이다. 이 패턴을 도입하는 대표적인 케이스는 두 가지 다른 속성을 조합하여 하나의 클래스로 표현하는 작업이 반복적으로 발생할 때이다.
브릿지 패턴을 설명하는 대표적인 예시로 도형과 색을 이야기할 수 있다. Shape에서 파생되는 두 가지 개념 도형과 색을 조합하여 하나의 클래스로 표현하다 보면 중복 코드 증가, 코드의 결합도 상승, 기능 수정과 확장에서 문제가 발생한다.
브릿지 패턴은 서로 다른 속성을 클래스로 분리하고, 한 쪽 클래스가 다른 쪽 클래스를 포함하는 컴포지션을 통해 문제를 해결한다. 이 물리적인 클래스 분리로 클라이언트가 직접 호출할 코드와 구체적인 로직이 분리되면서, 두 속성 간의 결합이 효과적으로 낮아져 앞서 언급한 문제들이 해결된다.
🍊 브릿지 패턴, 적용하기
Before
public interface Shape {
void draw();
}
public class GreenCircle implements Shape {
@Override
public void draw() {
System.out.println("This is a circle with color green");
}
}
public class GreenSquare implements Shape {
@Override
public void draw() {
System.out.println("This is a square with color green");
}
}
public class RedCircle implements Shape {
@Override
public void draw() {
System.out.println("This is a circle with color red");
}
}
public class RedSquare implements Shape {
@Override
public void draw() {
System.out.println("This is a square with color red");
}
}
After
public interface Color {
String fill();
}
public class Green implements Color {
@Override
public String fill() {
return "Green";
}
}
public class Red implements Color {
@Override
public String fill() {
return "Red";
}
}
public interface Shape {
void draw();
}
@RequiredArgsConstructor
public class Square implements Shape {
private final Color color;
@Override
public void draw() {
System.out.println("This is a square with color " + color.fill());
}
}
@RequiredArgsConstructor
public class Circle implements Shape {
private final Color color;
@Override
public void draw() {
System.out.println("This is a circle with color " + color.fill());
}
}
'Java > Design Pattern with Java' 카테고리의 다른 글
[구조 패턴] Chapter 9. Decorator Pattern (0) | 2023.12.11 |
---|---|
[구조 패턴] Chapter 8. Composite Pattern (0) | 2023.12.10 |
[구조 패턴] Chapter 6-2. Adapter Pattern : 패턴 적용하기 (0) | 2022.06.13 |
[구조 패턴] Chapter 6-1. Adapter Pattern : 패턴 소개 (0) | 2022.06.04 |
[객체 생성 패턴] Chapter 5-4. Prototype Pattern : Java에서 찾아보는 프로토타입 패턴 (0) | 2022.06.04 |