728x90
반응형
Object
: 생성자 없이 객체를 직접 만들어 냄
기존에 배웠던 class는 단지 인스턴스 객체를 만들기 위한 틀이기 때문에 내부에 있는 속성이나 함수를 사용하려면 생성자를 통해 실체가 되는 인스턴스 객체를 만들어야 했다.
그러나 여러 개의 인스턴스 객체가 필요하지 않으며 단 하나의 객체만으로 공통적인 속성과 함수를 사용해야하는 코드에서는 class를 쓸 필요 없이 Object를 사용하면 된다. (Singleton Pattern을 언어 차원에서 지원하는 것)
fun main(){
println(Counter.count) // 0
Counter.countUp()
Counter.countUp()
println(Counter.count) // 2
Counter.clear()
println(Counter.count) // 0
}
object Counter{
var count = 0
fun countUp(){
count++
}
fun clear(){
count = 0
}
}
object로 선언된 객체는 최초 사용 시 자동으로 생성되며 이후에는 코드 전체에서 공용으로 사용될 수 있으므로 프로그램이 종료되기 전까지 공통적으로 사용할 내용들을 묶어 만드는 것이 좋다.
Companion Object
: 클래스의 인스턴스 기능은 그대로 사용하면서 인스턴스 간에 공용으로 사용할 속성과 함수를 별도로 만드는 것
기능적으로는 기존의 언어들이 가진 static 멤버(클래스 내부에서 별도의 영역에 고정적으로 존재하여 인스턴스를 생성하지 않아도 공용으로 사용 가능한 속성이나 함수)와 비슷
// 짜장과 짬뽕 중 어느 것이 좋은지 투표
// 개별적인 투표수와 총 투표수 동시 집계
fun main(){
var a = FoodPoll("짜장")
var b = FoodPool("짬뽕")
a.vote()
a.vote()
b.vote()
b.vote()
b.vote()
println("${a.name} : ${a.count}") // 짜장 : 2
println("${b.name} : ${b.count}") // 짬뽕 : 3
println("총계 : ${FoodPoll.total}") // 총계 : 5
}
class FoodPoll(val name: String){
companion object{
var total = 0
}
var count = 0
fun vote(){
total++
count++
}
}
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 클래스의 다형성 (0) | 2023.09.10 |
---|---|
[Kotlin] 익명객체와 옵저버 패턴 (0) | 2023.09.09 |
[Kotlin] 스코프 함수 (0) | 2023.09.07 |
[Kotlin] 고차함수와 람다함수 (0) | 2023.09.07 |
[Kotlin] 스코프와 접근제한자 (0) | 2023.09.06 |