kotlinlang.org/docs/object-declarations.html#companion-objects
ํด๋์ค ์์ ์ค๋ธ์ ํธ ์ ์ธ์ companion ํค์๋๋ก ํ์๋ฉ๋๋ค.
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
companion object์ ๋ฉค๋ฒ๋ค์ ๋จ์ํ๊ฒ ํด๋์ค ์ด๋ฆ์ ํ์ ์๋ก ์ฌ์ฉํด์ ํธ์ถํ ์ ์์ต๋๋ค.
val instance = MyClass.create()
companion object์ ์ด๋ฆ์ ์๋ต ๊ฐ๋ฅํ๋ฐ, ์ด ๊ฒฝ์ฐ Companion ์ด๋ ์ด๋ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
class MyClass {
companion object { }
}
val x = MyClass.Companion
ํด๋์ค์ ์ด๋ฆ ์์ฒด(๋ค๋ฅธ ์ด๋ฆ์ ํ์ ์๋ก์๊ฐ ์๋๋ผ)๋ ํด๋์ค์ (์ด๋ฆ ์ฌ๋ถ์ ์๊ด์์ด) companion object๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
class MyClass1 {
companion object Named { }
}
val x = MyClass1
class MyClass2 {
companion object { }
}
val y = MyClass2
companion object๋ค์ ๋ฉค๋ฒ๋ค์ด ๋ค๋ฅธ ์ธ์ด๋ค์ static ๋ฉค๋ฒ๋ก ๋ณด์ผ ์ ์๋๋ผ๋, ๋ฐํ์์์ ์ด ๋ฉค๋ฒ๋ค์ ์ง์ง objects๋ค์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ค์ด๊ณ , interface๋ฅผ ๊ตฌํํ ์๋ ์์ต๋๋ค.
interface Factory<T> {
fun create(): T
}
class MyClass {
companion object : Factory<MyClass> {
override fun create(): MyClass = MyClass()
}
}
val f: Factory<MyClass> = MyClass
๊ทธ๋ฌ๋ JVM์์ @JvmStatic ์ฃผ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ, companion object๋ค์ ์ง์ง static ํจ์์ ํ๋๋ค๋ก ์์ฑ๋ฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] Companion Object์ ํ์ฉ (0) | 2021.03.29 |
---|---|
[Kotlin] Functional (SAM) interface (0) | 2021.03.29 |
[์ฉ์ด] sideload (0) | 2021.03.26 |
[Kotlin] Sequence (0) | 2021.03.26 |
[Java] Daemon thread (0) | 2021.03.26 |