Object
와 Companion Object
는 다르다.
결론 요약부터 말하자면,
Object는 독립적인 싱글톤 객체를 만들 때 사용되고, Companion Object는 클래스와 연관된 정적 멤버를 구현할 때 주로 사용됩니다
그리고 Companion Object
의 재밌는 점이 하나 또 있다.
//companion Object
class Dinner {
val lunch = "Steak"
companion object MyCompanionObject {
val MENU = "Pasta"
fun getDinner(): String {
return "Your dinner is ready!"
}
}
}
이렇게 Companion Object를 Class 내에서 선언했을 경우,
Dinner.MENU
, Dinner.MycompanionObject.MENU
로도 동일한 output 을 얻어낼 수 있다는 것이다.
println(Dinner.MENU)
println(Dinner.MyCompanionObject.MENU)
이렇게 동일한 결과가 나타나게 된다.
Kotlin 컴파일러는 companion object의 멤버들에 대해 특별한 처리를 합니다. 이를 통해 클래스 이름만으로도 companion object의 멤버에 직접 접근할 수 있게 됩니다
이런 내용이 명시되어져 있다.
둘 사이를 간단하게 그려보자면 이렇게 그릴 수 있겠네요.
Kotlin
|
+----+----+
| |
Object Class
| |
| Companion Object
| |
독립적 클래스에 종속
| |
싱글톤 구현 클래스 레벨 멤버