코틀린 object 키워드 3가지 사용법 | 동반객체, 싱글톤, 익명 객체
코틀린 Object 키워드 사용법
코틀린의 object 키워드가 의미하는 바는 클래스의 정의&생성을 동시에 하는 것이다. 코틀린에서 object 키워드는 동반객체, 싱글톤, 익명 객체에서 사용한다.
1. 동반객체
클래스의 프로퍼티 또는 메서드는 생성한 객체에서만 사용할 수 있고 다른 객체와는 공유할 수 없다. companion object는 그 클래스의 모든 객체가 공유하는 메서드 및 프로퍼티 정의가 가능하다.
class Bank(
private val bankName: String
) {
companion object {
const val discount = 5
}
override fun toString(): String{
return "bankName=$bankName discount=$discount"
}
}
fun main() {
val kbBank = Bank("KB국민은행")
val shBank = Bank("수협은행")
println(kbBank.toString())
println(shBank.toString())
println(Bank.discount) // 바로 접근 가능
}
2.싱글톤 클래스
싱글톤 클래스는 객체가 단 하나 존재하는 클래스를 의미하고 object 키워드를 이용한다.
object Bank {
val discount by lazy { 5.50 }
}
3.익명객체
익명객체는 말 그대로 객체의 명이 존재하지 않는 것을 의미한다. object 키워드를 이용하여 추상클래스를 상속 또는 인터페이스 구현할 수 있다.
interface BankInterface {
fun account()
}
abstract class BankClass {
abstract fun account()
}
fun main() {
val bankInterface = object : BankInterface {
override fun account() {
println("Interface Account")
}
}
val bankClass = object : BankClass() {
override fun account() {
println("abstract Class Account")
}
}
println(bankInterface.account())
println(bankClass.account())
}
인터페이스를 구현한 클래스를 이용하지 않고 추상클래스를 상속한 클래스를 이용하지 않고도 활용할 수 있다. 또한, 이러한 방법은 안드로이드의 listener 에 많이 사용된다.
val listener = object: View.Clicklistener {
override fun onClick(v: View){
println("View Clicked")
}
}