Зачем нужна аннотация Singleton

«Зачем нужна аннотация Singleton» — вопрос из категории Паттерны, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аннотация @Singleton в Dagger/Hilt помечает класс как синглтон, обеспечивая единственный экземпляр на протяжении всего жизненного цикла компонента (например, ApplicationComponent). Это полезно для тяжелых объектов (например, репозиториев, API-клиентов), которые не должны создаваться многократно.

Пример с Dagger/Hilt:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Singleton
    @Provides
    fun provideApiService(): ApiService = Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .build()
        .create(ApiService::class.java)
}

Без аннотации @Singleton каждый инжект создавал бы новый экземпляр. Важно помнить, что синглтон живет в рамках компонента — при уничтожении компонента уничтожается и экземпляр.