object объявляет синглтон; companion object — объект, связанный с классом, для «статических» членов и factory.
Разбор
object Repo — один экземпляр на процесс JVM.
companion object доступен как ClassName.foo().
- Можно именовать companion и реализовать интерфейс.
- На Android осторожно с тяжёлыми синглтонами и Context leak.
Пример
class User private constructor(val id: Long) {
companion object {
fun of(id: Long) = User(id)
}
}
Итог
object/companion заменяют static из Java с явной семантикой синглтона.