티스토리 뷰

브리지 패턴이란?

구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 합니다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 합니다. 

추상 계층에 있는 모든 클래스의 연산 실행은 구현 계층을 통해 이루어 진다.

브리지 패턴 사용 방법

구현 계층

  • Implementor : 구현 클래스에 대한 인터페이스를 제공
  • ConcreateImplementor: Implementor 인터페이스를 구현. 실제적은 구현 내용을 담음

추상 계층

  • Abstraction : 추상적 개념에 대한 인터페이스를 제공하고, 객체 구현부 인터페이스와 집합 관계를 형성
  • RefinedAbstraction  : 추상적 개념에 정의된 인터페이스를 확장
//추상 부분
public interface Implementor{
    void implMethodX();
    void implMethodY();
}

public class ConcreteImplementor implements Implementor{
	
    @Override
    public void implMethodX(){
    	//구현
    }
    
    @Override
    public void implMethodY(){
    	//구현
   }
}
//추상부분
public abstract class Abstraction {
    protected Implementor impl;
    
    protected Abstraction(Implementor impl){
         this.impl=impl;
    }
    
    public abstract void method1();
    
    public abstract void method2();
}

public class RefinedAbstraction extends Abstraction{
	
    public RefinedAbstraction(Implementor impl){
    	super(impl);
    }
    
    @Override
    public void method1(){
    	impl.implMethodX;
    }
    
    @Override
    public void method2(){
    	impl.implMethodY;
    }
}
// 클라이언트 코드
public class Client {
    public static void main(String[] args) {
        Abstraction abstraction=new RefinedAbstraction(new ConcreteImplemtor());
        abstraction.method1;
    }
}

 

상속 관계

  • 실행 시 구현 객체 하나만 존재
  • 추상 클래스와 구현 클래스가 컴파일시에 고정

Aggregation 관계

  • 실행 시 추상부분 객체와 구현 부분 객체 두 개가 따로 존재
  • 실행 시 추상 부분 객체와 구현부분 객체의 연결이 바뀔 수 있다.
  • 상속관계보다 더 유연하다.

패턴 사용 시기

  • 추상적 개념과 이에 대한 구현 사이의 지속적인 종속 관계를 피하고 싶을 때
  • 추상적 개념과 구현 모두가 독립적으로 서브클래싱을 통해 확장되어야 할 때
  • 추상적 개념에 대한 구현 내용을 변경하는 것이 다른 관련 프로그램에 아무런 영향을 주지 않아야 할 때
  • 클래스 계통에서 클래스 수가 급증하는것을 방지하고자 할 때

패턴 장점

  • 추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다.
  • 추상적인 코드와 구체적인 코드를 분리할 수 있다.
    • 구조적인 틀을 작성해놓고, 자유롭게 구현 코드를 주입할 수 있다.

패턴 단점

  • 계층 구조가 늘어나 복잡도가 증가할 수 있다.
    • 단 하나의 클래스만 만들고 추후에 확장 가능성이 아예 존재하지 않는다면, 오히려 번거로운 작업이 될 수 있다.

 

 

'CS > Design Pattern' 카테고리의 다른 글

옵서버 패턴 (Observer Pattern)  (0) 2024.04.18
싱글톤 패턴 (Singleton Pattern)  (0) 2024.04.18
컴포지트 패턴 (Composite Pattern)  (0) 2024.04.17
퍼싸드 패턴 (Facade Pattern)  (0) 2024.04.17
어댑터 패턴 (Adaptor Pattern)  (0) 2024.04.03