- κ°μ²΄μ νμ₯μ±μ ν₯μμν€κΈ° μν΄μ μ£Όλ‘ μ¬μ©λλ ν¨ν΄μΌλ‘, κ°μ²΄μμ λμμ μ²λ¦¬νλ
ꡬνλΆμ νμ₯μ μν μΆμλΆλ₯Ό λΆλ¦¬νλ€.
- μ¦, κΈ°λ₯κ³Ό ꡬνμ λν΄μ λ κ°μ λ³λμ ν΄λμ€λ‘ ꡬννλ€.
- (μΈμ©) ꡬν(Implemetation) μΌλ‘ λΆν° μΆμ(Abstraction) λ μ΄μ΄λ₯Ό λΆλ¦¬νμ¬, μ΄ λμ΄ μλ‘ λ
립μ μΌλ‘ κ΄λ¦¬ λ μ μλλ‘ νλ€.
// νμ₯μ±μ μν μΈν°νμ΄μ€
interface MorseCode {
fun dot()
fun dash()
fun space()
}
// κ°μ²΄μ λμμ λμ μ€νμμΌ μ£Όλ μ€κ° μμμ(Bridge)
class MorseCodeDelegate(private val morseCode: MorseCode) {
fun dot() {
morseCode.dot()
}
fun dash() {
morseCode.dash()
}
fun space() {
morseCode.space()
}
}
// 1. μ , μ , μ¬λ°±μΌλ‘ νκΈ°νλ λͺ¨μ€μ½λ ꡬν체
class DottedMorseCode : MorseCode {
override fun dot() {
println(".")
}
override fun dash() {
println("-")
}
override fun space() {
println(" ")
}
}
// 2. μλ¦¬λ‘ νκΈ°νλ λͺ¨μ€μ½λ ꡬν체
class SoundMorseCode : MorseCode {
override fun dot() {
println("μ£!")
}
override fun dash() {
println("μ~~")
}
override fun space() {
println("μ")
}
}
// 3. λΉμΌλ‘ νκΈ°νλ λͺ¨μ€μ½λ ꡬν체
class FlashMorseCode : MorseCode {
override fun dot() {
println("λ²μ©!")
}
override fun dash() {
println("λ°μ§!!")
}
override fun space() {
println(" - ")
}
}
fun main() {
val morseCode1 = MorseCodeDelegate(morseCode = DottedMorseCode()) // μ ,μ ,μ¬λ°±
morseCode1.dot()
morseCode1.dash()
morseCode1.space()
val morseCode2 = MorseCodeDelegate(morseCode = SoundMorseCode()) // μ리
morseCode2.dot()
morseCode2.dash()
morseCode2.space()
val morseCode3 = MorseCodeDelegate(morseCode = FlashMorseCode()) // λΉ
morseCode3.dot()
morseCode3.dash()
morseCode3.space()
}