반응형
브릿지(Bridge) 패턴은 GoF(디자인 패턴) 중 하나로, 구조(Structural) 패턴에 속합니다.
"구현부에서 추상층을 분리하여, 둘이 독립적으로 확장할 수 있도록 하는 패턴"입니다.
🔧 쉽게 말하면?
클래스들이 여러 방향(기능 + 플랫폼 등)으로 확장될 가능성이 있을 때,
상속을 계속 늘리기보다는,
기능 계층과 구현 계층을 분리해서 조합(composition)으로 해결하자!는 전략
📦 구조 예시 (UML 개념)
Abstraction
|
-------------------
| |
RefinedAbstraction Implementor <== 구현 계층 (인터페이스)
|
ConcreteImplementorA
ConcreteImplementorB
- Abstraction : 클라이언트가 사용하는 인터페이스 (추상화 계층)
- Implementor : 실제 동작을 수행하는 인터페이스 (구현 계층)
- RefinedAbstraction : Abstraction의 구체 클래스
- ConcreteImplementor : 실제 구현 클래스
📱 예시 – 리모컨과 TV
// 구현부 (Implementor)
interface TV {
fun on()
fun off()
fun tuneChannel(channel: Int)
}
class SamsungTV : TV {
override fun on() = println("Samsung TV on")
override fun off() = println("Samsung TV off")
override fun tuneChannel(channel: Int) = println("Samsung: channel $channel")
}
class LGTV : TV {
override fun on() = println("LG TV on")
override fun off() = println("LG TV off")
override fun tuneChannel(channel: Int) = println("LG: channel $channel")
}
// 추상화부 (Abstraction)
abstract class RemoteControl(protected val tv: TV) {
abstract fun turnOn()
abstract fun turnOff()
}
class BasicRemote(tv: TV) : RemoteControl(tv) {
override fun turnOn() = tv.on()
override fun turnOff() = tv.off()
}
➡️ 이제 BasicRemote는 TV 인터페이스를 따르는 어떤 TV든 조작할 수 있음.
TV가 늘어나도, RemoteControl 계열은 영향 안 받고 확장 가능.
✅ 언제 쓰면 좋을까?
- 클래스 계층이 기능/구현 방향으로 계속 확장될 경우
- 서로 독립적인 변경이 필요할 경우 (기능 ↔ 구현)
- 런타임에 기능을 바꿔서 조합하고 싶을 때
책으로 읽고 이해하기 어려웠는데 GPT가 이해하기 쉽게 설명해줘서 내용 첨부합니다!
반응형
'개발 상식' 카테고리의 다른 글
라이브 프로토콜 (RTMP VS WebRTC) (0) | 2025.04.06 |
---|---|
RTMP와 WebRTC란? (0) | 2024.11.24 |
데이터베이스 정규화 (1) | 2024.06.15 |
지능형 지속 위협(APT, Advanced Persistent Threat) (0) | 2021.04.14 |
보일러플레이트 코드란?(Boilerplate code) (0) | 2021.04.07 |