1. 브리지 패턴이란?

브리지 패턴은 두 개의 독립적인 개념을 연결(Bridge)해 서로의 변화에 영향을 덜 받게 만드는 구조적 디자인 패턴입니다. 일반적으로 추상화구현을 분리해 독립적으로 확장할 수 있도록 설계합니다. 이 패턴은 코드의 확장성과 유지보수성을 높이는 데 유용합니다. 🎯

특징

  • 추상화와 구현의 독립성 유지
  • 런타임에 구현을 바꿀 수 있는 유연성 제공
  • 다형성을 활용한 깔끔한 구조

2. 브리지 패턴의 구성 요소

브리지 패턴은 크게 4가지 구성 요소로 이루어집니다:

  1. Abstraction (추상화)
    • 기능의 상위 레벨을 정의한 인터페이스 또는 추상 클래스
  2. Refined Abstraction (구체화된 추상화)
    • 추상화를 확장한 구체적인 클래스
  3. Implementor (구현자)
    • 실제 기능을 수행하는 인터페이스
  4. Concrete Implementor (구체 구현자)
    • 구현자 인터페이스를 실제로 구현한 클래스

구조 다이어그램

출처: 위키

3. 브리지 패턴 예제

문제 상황

게임 아이템을 화면에 표시할 때, 무기 종류효과(예: 불, 얼음 등)를 조합해야 한다고 가정해봅시다.

브리지 패턴을 활용해 조합 가능한 클래스 수를 줄이고 유연성을 높이는 구조를 설계해 보겠습니다. 💡

코드 예제

// Implementor
public interface IEffect
{
    void ApplyEffect(string weapon);
}

// Concrete Implementors
public class FireEffect : IEffect
{
    public void ApplyEffect(string weapon)
    {
        Debug.Log($"{weapon}에 불 효과를 적용합니다.");
    }
}

public class IceEffect : IEffect
{
    public void ApplyEffect(string weapon)
    {
        Debug.Log($"{weapon}에 얼음 효과를 적용합니다.");
    }
}

// Abstraction
public abstract class Weapon
{
    protected IEffect effect;

    public Weapon(IEffect effect)
    {
        this.effect = effect;
    }

    public abstract void Use();
}

// Refined Abstraction
public class Sword : Weapon
{
    public Sword(IEffect effect) : base(effect) { }

    public override void Use()
    {
        Debug.Log("검을 휘두릅니다.");
        effect.ApplyEffect("검");
    }
}

public class Bow : Weapon
{
    public Bow(IEffect effect) : base(effect) { }

    public override void Use()
    {
        Debug.Log("활을 쏩니다.");
        effect.ApplyEffect("활");
    }
}

// 사용 예시
public class Game
{
    public static void Main()
    {
        IEffect fireEffect = new FireEffect();
        IEffect iceEffect = new IceEffect();

        Weapon sword = new Sword(fireEffect);
        sword.Use(); // 출력: 검을 휘두릅니다. 검에 불 효과를 적용합니다.

        Weapon bow = new Bow(iceEffect);
        bow.Use(); // 출력: 활을 쏩니다. 활에 얼음 효과를 적용합니다.
    }
}

4. 브리지 패턴의 사용 시 고려할 점

장점 ✨

  1. 확장성 증가: 추상화와 구현을 독립적으로 확장할 수 있습니다.
  2. 코드 중복 감소: 조합 가능한 클래스 수를 줄입니다.
  3. 유연성 제공: 런타임에 구현을 바꿀 수 있습니다.

주의점 ⚠️

  • 설계가 복잡해질 수 있으므로, 모든 상황에 적합하지 않습니다.
  • 추상화와 구현이 지나치게 단순하다면, 오히려 불필요한 구조가 될 수 있습니다.

5. 결론

브리지 패턴은 추상화와 구현을 분리해 서로 독립적으로 확장할 수 있도록 돕는 강력한 디자인 패턴입니다. 특히, 조합 가능한 객체가 많아질 때 설계의 복잡도를 줄이고 코드의 유연성을 높이는 데 효과적입니다. 하지만 과도하게 사용하면 불필요한 복잡성을 초래할 수 있으므로 적절한 상황에서 활용하는 것이 중요합니다. 🚀

6. 관련 링크

반응형

+ Recent posts