브리지 패턴은 객체의 확장성을 향상하기 위한 패턴으로, 객체에서 동작을 처리하는 구현부와 확장을 위한 추상부를 분리한다.
상속을 통해서 객체의 계층을 분리하고 기능을 확장하지만 강력한 결합 관계와 불필요한 메서드도 상속에 같이 포함된다는 단점을 갖고 있다.
이러한 상속의 문제점은 브리지 패턴을 응용하여 해결할 수 있다.
브리지 패턴을 적용하려면 4개의 구성 요소가 필요하다.
- Implementor
- Abstraction의 기능을 구현하기 위한 인터페이스 정의
- ConcreateImplementor
- 실제 기능을 구현
- Abstract
- 추상부 계층의 최상위 클래스
구현부에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출
- 추상부 계층의 최상위 클래스
- refinedAbstract
- 추상부 계층에서 새로운 부분을 확장한 클래스
상속은 강력한 결합을 가진다 -> 위임을 통해 느슨한 결합 관계로 변경 ( 복합 객체 구조 )
Inplementor
public interface HelloInterface {
public String greeting();
}
ConcreateImplementor
public class Korean implements HelloInterface {
@Override
public String greeting() {
return "안녕하세요";
}
}
public class English implements HelloInterface {
@Override
public String greeting() {
return "Hello";
}
}
패턴 설계 1
public class Language {
public HelloInterface ko;
public HelloInterface en;
public void setEnglish(HelloInterface en) {
this.en = en;
}
public void setKorean(HelloInterface ko) {
this.ko = ko;
}
}
복합 객체인 Language는 2개의 구현 클래스를 연결 ( 위임을 통해서 )
브리지 패턴은 복합 객체를 다시 재정의하여 추상 계층화된 구조이다.
위의 설계 1을 변형하여 구성 클래스의 연결 부분을 추상 계층으로 변경
추상화 변경을 실행하는 이유 : 각각의 계층이 독립적으로 확장/변경 가능하도록 하기 위해서
브리지 패턴은 기능을 처리하는 클래스와 구현을 담당하는 추상 클래스로 구별한다.
구현뿐 아니라 추상화도 독립적 변경이 필요할 때 브리지 패턴을 사용한다.
브리지는 구현 계층과 추상 계층 두 곳을 연결하는 다리라는 의미이다.
브리지 패턴을 적용하기 위해서는 계층을 잘 분리하는 것이 중요하다.
그리고 분리된 추상적 개념과 구현 계층을 연결해야 한다.
abstract
public abstract class LanguageAbstr {
public HelloInterface lan;
abstract public String greeting();
}
refinedAbstract
public class Message extends LanguageAbstr {
public Message(HelloInterface lan) {
this.lan = lan;
}
@Override
public String greeting() {
// bridge part
return this.lan.greeting();
}
}
추상 클래스는 상위 클래스와 하위 클래스 사이에서 역할을 분담한다
역할을 분담하는 추상 클래스의 계층은 새로운 기능을 생성하는 것이 아니라 기존의 기능을 분리하여 계층화한다.
브리지 패턴은 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가할 때 사용하면 유용한 패턴이다.
브리지 패턴은 새로운 인터페이스를 정의하여 기존 프로그램의 변경 없이 기능을 확장할 수 있다.
어댑터 패턴, 브리지 패턴
어댑터 패턴과 브리지 패턴이 유사해 보이기도 한다.
어댑터 패턴이 완성된 코드를 통합하고 결합할 때 사용되는 패턴이라면,
브리지 패턴은 처음 설계 단계에서 추상화 및 구현을 위해 확장을 고려한 패턴이라고 할 수 있다.
'DesignPattern' 카테고리의 다른 글
[DesignPattern] Decorator Pattern (장식자 패턴) (0) | 2021.06.12 |
---|---|
[DesignPattern] Composite Pattern (복합체 패턴) (0) | 2021.06.11 |
[DesignPattern] Adapter Pattern ( 어댑터 패턴 ) (0) | 2021.05.25 |
[DesignPattern] Prototype Pattern ( 프로토타입 패턴 ) (0) | 2021.05.24 |
[DesignPattern] Builder Pattern ( 빌더 패턴 ) (0) | 2021.05.21 |