구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 합니다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 합니다.
브릿지 패턴 구조
Abstraction: 기능 계층의 최상위 클래스, 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출
RefindAbstraction: 기능 계층에서 새로운 부분을 확장한 클래스
Implementor: Abstraction의 기능을 구현하기 위한 인터페이스 정의
ConcreteImplementor: 실제 기능 구현
브리지 패턴 예제 구조
Color(Implementor)
Blue, Red(ConcreateImplementor)
Brush(Abstract)
MonoLine, HBPencil (RefinedAbstract)
특징
브리지 패턴은 복합 객체를 다시 재정의하여 추상 계층화된 구조이다. 구성 클래스의 연결 부분들을 추상 클래스의 연결 부분을 추상 클래스로 변경한다. 이를 통해 각각의 계층이 독립적으로 확장 및 변경 가능해진다.
브리지 패턴은 기능을 처리하는 클래스와 구현을 담당하는 추상 클래스로 구별한다. 구현 뿐 아니라 추상화도 독립적 변경이 필요할 때 브리지 패턴을 사용한다.
브리지는 상속 대신 구현을 통해 분리된 객체를 연결. 구현을 통해 객체를 연결하면 객체간 종속 관계를 제거할 수 있다.
브리지 패턴에서 기능과 구현을 분리하여 확장을 보다 쉽게 할 수 있다. 분리된 계층은 독립적으로 확장 가능하다.
장점
클래스 계정을 분리할 때 완전한 인터페이스를 결합하지 않는다.
이를 통해 클래스에서 구현과 추상 부분 2개의 계층으로 분리할 수 있고, 분리된 2개의 추상 계층과 구현 계층은 독립적인 확장이 가능하다.
브리지패턴을 사용하면 런타임 시점에 어떤 방식으로 기능을 구현할지 선택할 수 있다.
기능을 독립적으로 확장할 수 있다면 상세한 기느을 외부로부터 숨길 수 있는 은닉 효과도 얻을 수 있다.
단점
추상화를 통해 코드를 분리 할 경우 코드 디자인이 설계가 복잡해진다는 단점이 있다.
'코드 > GOF' 카테고리의 다른 글
디자인 패턴 - 구조(Structural)패턴 (4) 퍼사드 패턴(Facade Pattern) (0) | 2024.03.15 |
---|---|
디자인 패턴 - 구조(Structural)패턴 (3) 데코레이터 패턴(Decorator Pattern) (0) | 2024.03.15 |
디자인 패턴 - 구조(Structural)패턴 (3)컴포지트 패턴(Composite Pattern) (0) | 2024.03.13 |
디자인패턴 - 구조(Structual)패턴 (1) 어댑터(Adapter) (0) | 2024.03.12 |
디자인 패턴 -생성 패턴(creational pattern) (2) | 2024.03.12 |