Kotlin, Object


Object


クラスの関数またはメンバー変数を使用するには、実際にクラスをインスタンスとして作成する必要があります.
ただし、インスタンスを作成せずに関数やメンバー変数をあちこちで使用するKotlinをサポートする機能がObjectです.
オブジェクトは、最初の使用時に自動的に作成され、関数を構築する必要はありません.
object Counter {
    var count = 0
    
    fun countUp() {
        count++
    }
    
    fun clear() {
        count = 0
    }
}

fun main() {        
    
    println(Counter.count)
    
    Counter.countUp()
    Counter.countUp() 
    println(Counter.count)
    
    Counter.clear()
    println(Counter.count)    
}

クラス内のオブジェクト


クラスにオブジェクトを作成すると、次の図に示すように、複数のインスタンスで共通に使用される値または関数が得られます.

機能的には既存言語のStaticと似ている.
以上の機能は、「同伴オブジェクト」キーワードで実現できます.
class FoodPoll (val name: String) {
    companion object {
        var total = 0
    }
    
    var count = 0
    
    fun vote() {
        total++
        count++
    }
}

fun main() {        
    
    var a = FoodPoll("짜장")
    var b = FoodPoll("짬뽕")
    
    a.vote()
    a.vote()
    
    b.vote()
    b.vote()
    b.vote()
    
    println("${a.name} : ${a.count}")
    println("${b.name} : ${b.count}")
    println("총계 : ${FoodPoll.total}")  
}