본문 바로가기

웹개발 - Back 관련/Architecture

[ GOF ] 브릿지 패턴 - Bridge Pattern 개념

Topic = 브릿지 패턴의 개념을 자세하게 알아보자.

브릿지 패턴

🔑 패턴 의도

브릿지 패턴은 독립적으로 확장할 수 있는, 밀접하게 관련된 두 개 이상의 차원을 가진 하나의 계층 구조를 두개의 개별 계층구조 ( 추상부, 구현부 ) 로 나눈 후 각각 독립적으로 확장 및 수정할 수 있도록 하는 구조 디자인 패턴이다.

 

🌟bridge 패턴의 핵심은 하나의 계층 구조를 추상부, 구현부로 나누는 것

 

[ ❓브릿지 패턴의 적절한 적용 대상 : 두 개 이상의 차원을 가진 하나의 계층 구조 ]

두 개 이상의 차원을 가진 하나의 계층 구조는, 조금 풀어서 정리하면 이해가 될 것 같다.

 

먼저 브릿지 패턴의 예시를 검색해보니 대부분 아래 케이스에 해당했다.

  • [ 구현부 :  윈도우, Mac, Linux ] , [ 추상부 : OS에 따른 GUI 을 보여주는 추상부 ] 
  • [ 구현부 :  색상 ], [ 추상부 : 색상에 따른 여러 가지 도형 생성 ]
  • [ 구현부 :  기계장치 ], [ 추상부 : 기계장치를 조작할 수 있는 리모컨을 나타내는 추상부 ]

패턴의 작동 원리를 이해 하는데에는 위 예시들로 충분히 이해할 수 있었지만, 비즈니스 로직으로 bridge 패턴의 예시를 직접 구상 하려고 하니, 여러 문제가 발생했다. 이유는 단순한 개념을 너무 과대 해석 하려고 했기 때문이다. 단순히 bridge 패턴은 행동과 구체적인 행위를 분리하는 것이고, 그 과정에서 strategy 패턴 등의 행동 패턴을 사용하는 것이다.

 

[ 브릿지 패턴 적용 케이스1 ]

📄 요구 사항

  • 복권 추첨 방식
    • BasicRaffle - 1~45 번 공 중에서 중복되지 않은 랜덤한 숫자 6개를 추첨하는 방식
    • SixNumberCombinationRaffle - 1자리 숫자 ( 0 ~ 9 ) 의 중복이 가능한 6개의 숫자 조합을 만드는 방식
  • 복권 종류
    • WeeklyLottery - BasicRaffle 방식을 사용하고, 1주일에 한번 추첨하는 일반 복권 
    • AnnuityLottery - SixNum...Raffle 방식을 사용하는 연금 복권

[ 브릿지 패턴을 적용하지 않는 예시 ]

class WeeklyLottery {
    fun basicRaffle() {
        // basicRaffle 로직
    }
}

class AnnuityLottery {
    fun sixNumberCombinationRaffle () {
        // sixNumberCombinationRaffle 로직
    }
}

 

[ 브릿지 패턴을 적용한 예시 ]

interface Lottery() {
    fun raffle(raffleStrategy: RaffleStrategy)
}

class WeeklyLottery: Lottery {
    override fun raffle(raffleStrategy: RaffleStrategy) {
        reffleStrategy.execute()
    }
}

class AnnuityLottery : Lottery {
    override fun raffle (raffleStrategy: RaffleStrategy) {
        reffleStrategy.execute()
    }
}

 

🌟 예시에서는 클라이언트 단에서 Lottery 객체의 raffle 매서드가 실행될 때, 매서드의 파라미터로 strategy 를 주입 받아 사용하지만, 이 외에 방식으로 외부로 메서드를 어떻게 분리했는지는 몰라도 객체 내부에서 각각의 추첨 방식을 정의하지 않고 외부로 분리하는 구조 자체가 bridge 패턴을 따른 것이다. 외부에 정의한 raffleStrategy 을 어떻게 Lottery 객체와 연결하여 사용하는 것은 strategy 패턴 등의 행위 패턴을 따라 작성하는 것이고, 추상부와 구현부를 분리하는 것 자체에서 bridge 패턴을 적용한 것이라고 볼 수 있다.

 

 

 

 

 

 

 


 

[ A. 오늘 복습한 내용 / B. 다음에 학습할 내용 ]

A. strategy는 행동패턴, bridge 패턴은 구조 패턴이고, 모든 패턴은 무조건 상호 독립적이지 않고, 상호 보완할 수 있다.

 

B. 프로토 타입 패턴

 

 


[Reference]