[코틀린 기초] 생성자 없이 객체를 직접 만드는 Object
lesson 16 생성자 없이 객체를 직접 만드는 Object
여러개의 인스턴스 객체가 필요 없다면 ?
굳이 class를 쓸 필요 없이 Object를 사용하자 !
Singleton Pattern: 클래스의 인스턴스를 '단 하나'만 만들어 사용하도록 하는 코딩 아키택쳐 패턴
Object는 인스턴스를 생성하지 않고 그 자체로 객체이기 때문에 생성자를 따로 만들지 않는다.
코드 예제
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
}
}
object 키워드로 선언. { } 중괄호를 통해서 속성과 함수 만들 수 있다.
Object로 선언된 객체는 '최초 사용시' 자동으로 생성되며 이후에는 코드 전체에서 공용으로 사용된다.
실행 결과
companion object
그런데 class 안에도 Object를 만들수 있다 => companion object
class가 instance 여러개를 만들 수 있는데, 이 여러 인스턴스가 공유할 공용 속성 및 함수를 compnion object를 이용해서 만들 수 있는 것이다. java의 static 키워드와 비슷하다.
static: 클래스 냄부에서 별도의 영역에 고정적으로 존재하여 인스턴스를 생성하지 않아도 공용으로 사용가능한 속성이나 함수. 의 개념과 비슷하다.
코드예제
fun main(){
var a = FoodPoll("짜장")
var b = FoodPoll("짬뽕")
a.vote()
a.vote()
a.vote()
b.vote()
b.vote()
println("${a.name} : ${a.count}")
println("${b.name} : ${b.count}")
println("총계 : ${FoodPoll.total}")
}
class FoodPoll(val name: String){
companion object{
var total = 0
}
var count = 0
fun vote(){
total++
count++
}
}
출력결과
짜장 : 3
짬뽕 : 2
총계 : 5
companion object로 만들어진 속성 total은 5가 나온 모습
학습 출처
테크과학! DiMo-디모의 Kotlin 강좌 (lesson 16)
(www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN)
구독과 좋아요 !
+추가 공부
object 표현식
위에서 배운 object 선언과 달리 object 표현식도 있다. object 표현식은 이름이 없고, 싱글톤도 아니다. obejct표현식이 사용될 때마다 새로운 인스턴스가 생성된다. 즉 우리가 배운 java의 익명 내부 클래스와 비슷한 형태로 사용할 수 있는 것이다.
object