๊ทธ๋ฐ๋ฐ ์ด๋ ๋ , ํด๋์ค ๋ด๋ถ์ ์๊ฒ ์ ์ธ๋ [companion object] ๋ฅผ ๋ง์ฃผ์น๊ฒ ๋์๋ค. ์๋์ ํ์์ผ๋ก ๋ง์ด๋ค.
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
...
Log.i(TAG, "MainActivity")
}
companion object {
private const val TAG="MainActivity"
}
Object declaration๊ณผ ๋น์ทํ๊ธด ํ ๊ฒ ๊ฐ๊ธด ํ๋ฐ, ์์ companion์ด ๋ถ์๋ค. ๋ฌด์จ ์ฐจ์ด๊ฐ ์์๊น?
๋จผ์ , ์์์ ์ค๋ช ํ๊ธด ํ์ง๋ง Object declaration์ ๋ํด ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๋ณด์.
์ฑ๊ธํค ํจํด์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ์ฝํ๋ฆฐ์์ ์ ๊ณตํ๋ ์ผ์ข ์ ๊ฐ์ฒด ์ ์ธ ํค์๋๋ค.
object DataProviderManager {
fun registerDataProvider(provider: DataProvider) {
// ...
}
val allDataProviders: Collection<DataProvider>
get() = // ...
}
Object ์ ์ธ์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค.
์ฐธ๊ณ ๋ก Object ํค์๋๊ฐ ์ ์ธ๋ ํด๋์ค๋ ์ฃผ/๋ถ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ฐ์ฒด ์์ฑ๊ณผ ๋์์ ์์ฑ์ ํธ์ถ ์์ด ๋ฐ๋ก ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ์ค์ฒฉ object ์ ์ธ์ด ๊ฐ๋ฅํ๋ฉฐ, ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ์์ํ ์ ์๋ค.
ํด๋์ค ๋ด๋ถ์ ๊ฐ์ฒด ์ ์ธ์ ์ํ object ํค์๋๋ค. ํ ๋ง๋๋ก ํด๋์ค ๋ด๋ถ์์ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
companion object์ ๋ฉค๋ฒ๋ค์ ์์ฑ์ ์์ด companion object ํด๋์ค์ ์ด๋ฆ์ ์ฌ์ฉํด์ ํธ์ถํ ์ ์๋ค.
val instance = MyClass.create()
companion object๋ ํด๋์ค ์ธ์คํด์ค ์์ด ์ด๋ค ํด๋์ค ๋ด๋ถ์ ์ ๊ทผํ๊ณ ์ถ์ ๋ ์ ์ธํ๋ค. ํด๋์ค๋น ํ๋๋ง ์ฌ์ฉํ ์ ์๊ณ , Object declaration๊ณผ ๊ฐ์ด ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, static์ผ๋ก ์ ์ธ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐํ์์ ์ค์ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ก ์คํ๋๋ค.
๋ ์ ์ธ ๋ฐฉ์์ ์ฐจ์ด์ ์ ์์ ๊ฐ๋ ๋ง ๋ด๋ ์ ์ ์๋ค. Object declaration์ ํด๋์ค ์ ์ฒด๊ฐ ํ๋์ ์ฑ๊ธํค ๊ฐ์ฒด๋ก ์ ์ธ๋์ง๋ง, companion object๋ ํด๋์ค ๋ด์ ์ผ๋ถ๋ถ์ด ์ฑ๊ธํค ๊ฐ์ฒด๋ก ์ ์ธ๋๋ ๊ฒ์ด๋ค. ๋ํ ๋์ ์ด๊ธฐํ ์์ ์ด ๋ค๋ฅด๋ค. Object declaration์ด ์ ์ธ๋ ํด๋์ค๋ ํด๋น ํด๋์ค๊ฐ ์ฌ์ฉ๋ ๋ ์ด๊ธฐํ๊ฐ ๋์ง๋ง, companion object๋ ํด๋น ํด๋์ค๊ฐ ์ํ ํด๋์ค๊ฐ load๋ ๋ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
https://kotlinlang.org/docs/object-declarations.html#object-declarations-overview
https://umbum.dev/597
https://velog.io/@ditt/Kotlin-Object-%ED%82%A4%EC%9B%8C%EB%93%9C