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]
'웹개발 - Back 관련 > Architecture' 카테고리의 다른 글
[ GOF ] 파사드 패턴 - Facade Pattern with Kotlin (0) | 2024.10.15 |
---|---|
[ GOF ] 상태 패턴 - State Pattern with Kotlin (0) | 2024.10.10 |
[ GOF ] 싱글톤 패턴, object - Singleton Pattern with Kotlin (6) | 2024.10.08 |
[ GOF ] 팩토리 매서드 패턴 - Factory Method Pattern with Kotlin (0) | 2024.09.11 |
[ GOF ] 전략 패턴 - Strategy Pattern with Koltin (0) | 2024.09.10 |