object 는 타언어의 static 과 같은 용도로 사용할 수 있으며 이 특징을 이용해 싱글턴 패턴이 가능하다.
1. object 클래스
object 는 프로그램이 실행될때 자동으로 인스턴스화 되는 클래스이다.
[code]
fun main() {
println(Counter.count)
Counter.countUp()
Counter.countUp()
println(Counter.count)
Counter.clear()
println(Counter.count)
}
object Counter {
var count = 0
fun countUp() {
count++
}
fun clear () {
count = 0
}
}
[/code]
출력결과
[code]
0
2
0
[/code]
2. companion object
클래스 내부에 static 멤버와 같이 작동한다.
여러개의 객체를 생성하여도 companion object 는 공유한다.
[code]
fun main() {
var f1 = FoodPoll(“부먹”)
var f2 = FoodPoll(“찍먹”)
f1.vote()
f1.vote()
f2.vote()
f2.vote()
f2.vote()
println(“F1 count: ${f1.count}”)
println(“F2 count: ${f2.count}”)
println(“Total: ${FoodPoll.total}”)
}
class FoodPoll(val name: String) {
companion object {
var total = 0
}
var count = 0
fun vote() {
total++
count++
}
}
[/code]
결과
[code]
F1 count: 2
F2 count: 3
Total: 5
[/code]