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!!")
}
})
}