learned

[๋””์ž์ธ ํŒจํ„ด] ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด

์ •์˜

ํ•œ ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํฌ๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜. ์ธํ„ฐํŽ˜์ด์Šค ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ๊ฐ™์ด ์“ธ ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๊ฐ„๋‹จ ์˜ˆ์ œ์ฝ”๋“œ

import kotlin.test.*
import kotlin.time.*

interface Duck {
    fun quack()
    fun fly()
}

class MallardDuck : Duck {
    override fun quack() {
        println("Quack")
    }
    override fun fly() {
        println("I'm flying")
    }
}

interface Turkey {
    fun gobble()
    fun fly()
}

class WildTurkey : Turkey {
    override fun gobble() {
        println("Gobble")
    }
    override fun fly() {
        println("I'm flying")
    }
}

class TurkeyAdapter(val turkey : Turkey) : Duck {
    override fun quack() {
        turkey.gobble()
    }
    
    override fun fly() {
        turkey.fly()
    }
}

fun actionDuck(duck : Duck) {
    duck.quack()
    duck.fly()
}

fun main() {
    val duck = MallardDuck()
    val turkey = WildTurkey()
    val turkeyAdapter = TurkeyAdapter(turkey)
    
    actionDuck(duck)
    actionDuck(turkeyAdapter)
}