Skip to main content

[Design Pattern] 구조 패턴 5. 브리지 (Bridge)




브리지 (Bridge) #

브리지

  • 구현 부분(플랫폼)추상화 부분(인터페이스) 을 각각 독립적으로 분리 하여서 서로 영향을 주지 않고 내부적으로 확장할 수 있게 한다.
  • 예를 들면, 추상화 부분이란 APP의 GUI라고 볼 수 있고, 구현 부분이란 OS의 API라고 볼 수 있다.



개념적인 예시 #

// 추상화 부분
class Abstraction
{
    protected IImplementation _implementation;
    
    public Abstraction(IImplementation implementation)
    {
        this._implementation = implementation;
    }
    
    public virtual string Operation()
    {
        return "Abstract: Base operation with:\n" + 
            _implementation.OperationImplementation();
    }
}

// 구현 부분을 건드리지 않고 추상화 부분을 확장할 수 있다. 
class ExtendedAbstraction : Abstraction
{
    public ExtendedAbstraction(IImplementation implementation) : base(implementation)
    {
    }
    
    public override string Operation()
    {
        return "ExtendedAbstraction: Extended operation with:\n" +
            base._implementation.OperationImplementation();
    }
}

// 구현 부분
public interface IImplementation
{
    string OperationImplementation();
}

class ConcreteImplementationA : IImplementation
{
    public string OperationImplementation()
    {
        return "ConcreteImplementationA: The result in platform A.\n";
    }
}

class ConcreteImplementationB : IImplementation
{
    public string OperationImplementation()
    {
        return "ConcreteImplementationA: The result in platform B.\n";
    }
}

class Client
{
    // 클라이언트는 추상화 부분으로 접근할 수 있다. 
    public void ClientCode(Abstraction abstraction)
    {
        Console.Write(abstraction.Operation());
    }
}

class Program
{
    static void Main(string[] args)
    {
        Client client = new Client();

        Abstraction abstraction;
        
        // 구현 부분과 추상화 부분이 독립적으로 상호 교환될 수 있다. 
        abstraction = new Abstraction(new ConcreteImplementationA());
        client.ClientCode(abstraction);
                
        abstraction = new ExtendedAbstraction(new ConcreteImplementationB());
        client.ClientCode(abstraction);
    }
}



References #