컴퓨터공부/Kotlin & Java

Kotlin : object keyword vs companion object keyword, and 익명 클래스

achivenKakao 2020. 10. 1. 08:07

object 키워드

    - 싱글턴(singletion; 인스턴스가 하나만 있는 클래스)을 선언하는 키워드

object MySingleton{
    val prop = "나는 MySingleton의 속성이다."
    fun method() = "나는 MySingleton의 메소드다."
}

 

Companion object 키워드

    - 클래스내의 객체 클래스(static이 아니다.... 하지만 비슷한 효과가 난다.)
    - 축약형이 가능

class MyClass2{
    companion object{
        val prop = "나는 Companion object의 속성이다."
        fun method() = "나는 Companion object의 메소드다."
    }
}

fun main(args: Array<String>) {


    println(MyClass2.Companion.prop)
    println(MyClass2.Companion.method())

    val comp1 = MyClass2.Companion  //--(1)   변수 할당이 가능하다. java의 static 으로는 불가능
    println(comp1.prop)
    println(comp1.method())

    val comp2 = MyClass2  //--(2)   이것 또한 MyClass2.Companion 하고 같은 표현이다.
    println(comp2.prop)
    println(MyClass2.prop)
    println(comp2.method())
}

    - companion object의 기본이름은 Companion 이다.

    - companion object의 이름을 바꿀 수 있으며, 이름을 바꾸면 Companion 이름을 쓸 수 없다.

class MyClass3{
    companion object MyCompanion{  // -- (1)
        val prop = "나는 Companion object의 속성이다."
        fun method() = "나는 Companion object의 메소드다."
    }
}
fun main(args: Array<String>) {
    println(MyClass3.MyCompanion.prop) // -- (2)
    println(MyClass3.MyCompanion.method())
 
    val comp1 = MyClass3.MyCompanion // -- (3)
    println(comp1.prop)
    println(comp1.method())
 
    val comp2 = MyClass3 // -- (4)
    println(comp2.prop)
    println(comp2.method())
     
    val comp3 = MyClass3.Companion // -- (5) 에러발생!!!
    println(comp3.prop)
    println(comp3.method())
}

 

익명 클래스

    - object keyword로 만들 수 있다.

interface ClickListener{
    fun onClick()
}

fun setClickAction(clickListener: ClickListener){
    clickListener.onClick()
}

fun main(args: Array){
	setClickAction(object : ClickListener{
        override fun onClick() {
            println("clicked!!")
        }
    })    
    
}

 

출처 : www.bsidesoft.com/8187

tourspace.tistory.com/109