뭐하는 녀석일까🤔
이 companion object라는 녀석은 kotlin에서만 존재한다.
보통 이걸 사용하는 이유는 kotlin에는 자바에서 사용하던 static이 없기 때문인데, 비슷한 기능을 제공하기때문에 자주 사용된다.
간략히 형태를 알아보자면,
class moko {
companion object {
val PERSON = "heymoko"
fun comeon() {
}
}
}
이런식으로 구성되는데, 외부에서 접근하기 위해선
moko.TAG
moko.companion.TAG
moko.comeon()
이런식으로 접근이 가능하다
굳이 class안에 담지 않아도
companion object {
private const val DEFAULT_URL = "http://www.google.com"
}
이렇게 구성하여, 편하게 꺼내 사용할 수도 있다.
webview.loadUrl(DEFAULT_URL) // www.google.com이 정상적으로 실행된다.
Companion object를 자바에서는 못쓸까?
몇 가지만 변경해주면 자바에서도 사용할 수 있다.
const처리가 되어있는 속성들은 별도의 작업없이 바로 자바에서 사용할 수 있으며, 함수는 @JvmStatic이라는 어노테이션을 사용하면 자바에서 사용할 수 있다.
class moko {
companion object {
const val PERSON = "heymoko"
@JvmStatic fun comeon() {
}
}
}
위와 같이 변경을 해주면, 자바에서도 사용이 가능하고, const를 붙이지 못하는 형식의 경우에는 @JvmField를 사용하면 해결이 사용이 가능해진다.