코틀린 심화3 - 싱글톤과 동반객체
singleton
코틀린에서는 object
키워드를 사용하여 싱글톤
객체를 생성할 수 있다.
싱글톤
은 인스턴스 하나를 공유하여 사용하는 방식을 의미한다.(자바의 static과 유사하다.)
1
2
3
4
5
6
7
8
9
10
// object로 객체 생성 시 싱글톤으로 생성
object Singleton {
val a = 123
fun printA() = println("A")
}
fun main() {
println(Singleton.a)
Singleton.printA()
}
코틀린에서 싱글톤 객체는 하나의 인스턴스를 공유하여 사용하기 때문에 자바의 static 클래스처럼 사용되며, 주로 유틸성 클래스나 상태 공유 클래스에 사용된다. 아래에서 간단한 날짜 유틸 싱글톤 객체를 생성하여 활용해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
object DateTimeUtils {
val now: LocalDateTime
get() = LocalDateTime.now()
// const는 자바의 상수 개념
const val DEFAULT_FORMAT = "yyyy-MM-dd"
fun same(a: LocalDateTime, b: LocalDateTime): Boolean {
return a == b
}
}
fun main() {
println(DateTimeUtils.now)
println(DateTimeUtils.DEFAULT_FORMAT)
val now = LocalDateTime.now()
println(DateTimeUtils.same(now, now))
}
companion object
코틀린에서는 클래스 내부에서 companion object
키워드를 사용하여 동반객체를 생성할 수 있다. 동반객체 내부에 선언된 변수와 메소드는 클래스의 정적 멤버로 사용되며, 클래스에서 직접 접근이 가능해진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MyClass {
// 외부에서 생성하지 못하도록 private 생성자로 선언
private constructor()
// companion object로 동반객체 생성(이름은 생략가능)
companion object MyCompanion {
val a = 123
fun newInstance() = MyClass()
}
}
fun main() {
// MyClass에서 동반객체(MyCompanion)의 변수와 메소드에 직접 접근할 수 있다.
println(MyClass.a) // = MyClass.MyCompanion.a
println(MyClass.newInstance()) // = MyClass.MyCompanion.newInstance()
}
위와 같이 클래스 내부에서 companion object
키워드로 동반객체를 생성하면, 클래스를 생성하지 않아도 클래스에서 동반객체의 변수와 메소드에 직접 접근이 가능하다.
This post is licensed under CC BY 4.0 by the author.