본문 바로가기
Study/디자인 패턴

[C#/Unity][디자인패턴] 브릿지 패턴(Bridge Pattern)

by 스테디코디스트 2023. 12. 5.
반응형

1. 브릿지 패턴이란?

- 클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 한다.

- 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다.

- 객체의 확장성을 향상시키기 위한 패턴.

 

2. 브릿지 패턴을 사용하는 경우

- 클래스의 내용과 클래스에서 처리하는 일이 자주 변화하는 경우

- 기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가 해야하는 경우

- 부모 추상 클래스가 기본 규칙 세트를 정의하고 구체적인 클래스가 추가 규칙을 추가하고 싶은 경우

- 객체에 대한 참조가 있는 추상 클래스가 있고 각 구체적인 클래스에서 정의될 추상 메서드가 있는 경우

 

3. 브릿지 패턴의 장점

- 새로운 인터페이스를 정의하여 기존 프로그램의 변경없이 기능을 확장할 수 있다.

- 기능 계층, 구현 계층이 분리되어 있기 때문에 독립적으로 확장이 가능한 디자인이다.

- 런타임 시점에 어떤 방식으로 기능을 구현할지 선택할 수 있다.

- 기능을 독립적으로 확장할 수 있다면, 상세한 기능을 외부로부터 숨길 수 있는 은닉 효과도 얻을 수 있다.

 

4. 브릿지 패턴의 단점

- 계층 구조가 늘어나 복잡도가 증가할 수 있다.

- 구현체의 재사용성이 좋지 않다.

- 추상화와 구현체가 너무 밀접하게 통합되어 있다.

 

5. 코드 구현

using System;
using System.Collections.Generic;
using System.Threading;

namespace StudyCSharp
{
    // 인터페이스
    public interface Exercise
    {
        void Part(); // 운동 부위
        void Weight(); // 중량
        void Count(); // 개수
    }

    public class Squat : Exercise
    {
        public void Part()
        {
            Console.WriteLine("하체");
        }
        public void Weight()
        {
            Console.WriteLine("90kg");
        }

        public void Count()
        {
            Console.WriteLine("5~8회");
        }                       
    }

    public class BenchPress : Exercise
    {
        public void Part()
        {
            Console.WriteLine("가슴");
        }
        public void Weight()
        {
            Console.WriteLine("70kg");
        }

        public void Count()
        {
            Console.WriteLine("8~10회");
        }
    }

    // 추상계층
    public abstract class Routine
    {
        private Exercise _exercise;

        public Routine(Exercise exercise)
        {
            this._exercise = exercise;
        }

        public void Part()
        {
            _exercise.Part();
        }

        public void Weight()
        {
            _exercise.Weight();
        }

        public void Count()
        { 
            _exercise.Count(); 
        }

        public abstract void ExerciseInfo();        
    }

    // 구현 계층(확장)
    public class Monday : Routine
    {
        public Monday(Exercise exercise) : base(exercise) { }

        public override void ExerciseInfo()
        {
            Console.WriteLine("[벤치프레스]");
            Part();
            Weight();
            Count();
        }
    }

    public class SaturDay : Routine
    {
        public SaturDay(Exercise exercise) : base(exercise) { }

        public override void ExerciseInfo()
        {
            Console.WriteLine("[스쿼트]");
            Part();
            Weight();
            Count();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Routine monday = new Monday(new BenchPress());
            Routine saturday = new SaturDay(new Squat());

            monday.ExerciseInfo();
            Console.WriteLine("---------------------------------");
            saturday.ExerciseInfo();
            Console.WriteLine("---------------------------------");
        }
    }
}

<참고 사이트>

 

 

[Java][디자인 패턴] 8. 브리지 패턴 (Bridge Pattern)

디자인패턴 [Java][디자인 패턴] 8. 브리지 패턴 브리지 패턴은 객체의 확장성을 향상하기 위한 패턴으로, 객체에서 동작을 처리하는 구현부와 확장을 위한 추상부를 분리한다. 브리지 패턴이란?

hirlawldo.tistory.com

 

07 브릿지 패턴 (Bridge Pattern)

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

lktprogrammer.tistory.com

 

[C# 디자인패턴] 제8강 브릿지패턴

예제코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespa

codepump.tistory.com

 

[GoF] 브릿지 (Bridge) 패턴

브릿지 (Bridge) 패턴 구조 패턴클래스의 구현 계층과 추상 계층을 분리하여 각자의 독립적인 변형을 용이하게 합니다. 객체 지향 프로그래밍에 있어 클래스의 상속이란 다형성의 의미 그 자체를

yupdown.tistory.com

 

브릿지 패턴 (Bridge Pattern)

사용 의도 추상화와 구현을 분리하여 유연함을 증가시키고 재사용성을 증가시킵니다. 예시 메시지를 보내는 어플리케이션을 개발한다고 가정해봅니다. TextMessage 와 EmailMessage 를 보내는 어플리

robin00q.tistory.com