tonykang22 / study

0 stars 0 forks source link

[Kotlin & Spring] 04. 실드 클래스 #113

Open tonykang22 opened 1 year ago

tonykang22 commented 1 year ago

실드 클래스

실드 클래스를 쓰는 이유

abstract class Developer {
    abstract val name: String
    abstract fun code(language: String)
}

data class BackendDeveloper(override val name: String) : Developer() {

    override fun code(language: String) {
        println(" ${language} ")
    }
}

data class FrontendDeveloper(override val name: String) : Developer() {

    override fun code(language: String) {
        println(" ${language} ")
    } 
}


object DeveloperPool {
    val pool = mutableMapOf<String, Developer>()

    fun add(developer: Developer) = when (developer) {
        is BackendDeveloper -> pool[developer.name] = developer
        is FrontendDeveloper -> pool[developer.name] = developer
        else -> {
            println(" ") 
        }
    }

    fun get(name: String) = pool[name]
}

fun main() {
    val backendDeveloper = BackendDeveloper(name = "토니")
    DeveloperPool.add(backendDeveloper)

    val frontendDeveloper = FrontendDeveloper(name = "저스틴)
    DeveloperPool.add(frontendDeveloper)

    println(DeveloperPool.get("토니"))
    println(DeveloperPool.get("저스틴")) 
}


object DeveloperPool {
    val pool = mutableMapOf<String, Developer>()

    fun add(developer: Developer) = when (developer) { //컴파일 오류
        is BackendDeveloper -> pool[developer.name] = developer
        is FrontendDeveloper -> pool[developer.name] = developer
    }

    fun get(name: String) = pool[name]
}



sealed class Developer {

    abstract val name: String
    abstract fun code(language: String)

}