개발을 하다 보면 싱글톤 패턴을 구현하기 위해 object를 사용하기도 한다. 평소에 잘 모르고 지나갔지만 이번에는 object에 관해 알아보겠다.
# object
object로 클래스를 정의하면 클래스 선언과 동시에 객체가 생성됨으로써 싱글톤 패턴이 적용되어 객체가 한 번만 생성이 된다.
# object class 특징
1. object class 는 클래스 객체 생성 없이 즉시, 접근 가능한 클래스이다.
2. object class 는 생성자를 갖지 않는다.
3. object class 는 어느 클래스, 함수에서든 별도의 객체화 과정 없이 접근 가능하다.
4. object class 는 프로그램이 실행되는 동안 저장된 데이터는 손실되지 않는다.
5. object class 는 코틀린에 static이 없다는 것을 대체해 사용할 수 있는 클래스이다.
6. 안드로이드에서는 액티비티, 프래그먼트를 구분하지 않고 데이터 전달을 할 수 있다. (앱 실행 중인 동안 지속 보관)
# object class 사용법
// object class인 Counter 생성
object Counter{
var count = 0
fun countUp(){
count++
}
fun clear(){
count = 0
}
}
fun main() {
println(Counter.count)
// 별도의 인스턴스를 생성하지 않아서 object이름에 참조연산자를 붙여 사용
Counter.countUp()
Counter.countUp()
println(Counter.count)
Counter.clear()
println(Counter.count)
}
// 출력 값
// 0
// 2
// 0
# companion object
동반 객체라고도 하며 클래스 안에도 object를 만드는것이 companion object이다. 자바에서는 static 멤버와 비슷하다고 생각하면 된다.
# companion object 특징
1. static처럼 동작할 뿐 사실 static이 아닌 객체이다 (Companion 키워드로 접근 가능)
2. 클래스 내 딱 하나만 쓸 수 있다.
3. 인터페이스 내에도 정의할 수 있다.
4. 상속 관계에서 companion 멤버는 가려진다.
# companion object 사용법
짜장과 짬뽕중에 투표를 해서 count와 total을 구하는 예제를 해보겠다.
class FoodName(val name : String){
// companion object 생성해 공유 객체 total 생성
companion object{
var total = 0
}
var count = 0
fun countUp(){
total++
count++
}
}
fun main() {
var a = FoodName("짜장")
var b = FoodName("짬뽕")
a.countUp()
a.countUp()
b.countUp()
b.countUp()
b.countUp()
println("${a.name} : ${a.count}")
println("${b.name} : ${b.count}")
println("총계 : ${FoodName.total}")
}
// 출력 값
// 짜장 : 2
// 짬뽕 : 3
// 총계 : 5
출력 값에서 나오듯 서로 다른 인스턴스인데 companion object에서 total 변수를 생성해 줬기 때문에 total은 공유가 돼서 올라간다.
'Kotlin 공부 노트' 카테고리의 다른 글
[Android-Kotlin] Groovy DSL -> Kotlin DSL Migration(코틀린 DSL로 의존성 관리 마이그레이션), Kotlin DSL이란? (2) | 2023.10.29 |
---|---|
DTO, DAO, VO에 알아보자! (0) | 2023.03.30 |
프래그먼트(Fragment) with Kotlin 알아보기! (0) | 2022.02.10 |
코틀린의 접근 제한자(Kotlin's Visibility Modifier) (0) | 2022.02.06 |
코틀린의 문법 (let, with, run, apply, also) (0) | 2022.01.02 |