Hilt EntryPoint 주입 사용 예 (Feat. Perplexity)

Philipy (윤상필)·2025년 11월 26일

아래 실무에서 Hilt EntryPoint 주입이 필요한 주요 컴포넌트별 예제를 KotlinJava로 각각 제공합니다.


1. WorkManager 예제

Kotlin

@EntryPoint
@InstallIn(SingletonComponent::class)
interface MyEntryPoint {
    fun messageHelper(): MessageHelper
}

class MyWorker(
    context: Context,
    workerParams: WorkerParameters
) : Worker(context, workerParams) {

    override fun doWork(): Result {
        val entryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint::class.java)
        val helper = entryPoint.messageHelper()
        helper.showToast("WorkManager DI 성공!")
        return Result.success()
    }
}

Java

@EntryPoint
@InstallIn(SingletonComponent.class)
public interface MyEntryPoint {
    MessageHelper getMessageHelper();
}

public class MyWorker extends Worker {

    public MyWorker(@NonNull Context context, @NonNull WorkerParameters params) {
        super(context, params);
    }

    @NonNull
    @Override
    public Result doWork() {
        MyEntryPoint entryPoint = EntryPointAccessors.fromApplication(getApplicationContext(), MyEntryPoint.class);
        MessageHelper helper = entryPoint.getMessageHelper();
        helper.showToast("WorkManager DI 성공!");
        return Result.success();
    }
}

2. BroadcastReceiver 예제

Kotlin

@EntryPoint
@InstallIn(SingletonComponent::class)
interface MyEntryPoint {
    fun messageHelper(): MessageHelper
}

class MyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val entryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint::class.java)
        entryPoint.messageHelper().showToast("BroadcastReceiver DI!")
    }
}

Java

@EntryPoint
@InstallIn(SingletonComponent.class)
public interface MyEntryPoint {
    MessageHelper getMessageHelper();
}

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        MyEntryPoint entryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint.class);
        MessageHelper helper = entryPoint.getMessageHelper();
        helper.showToast("BroadcastReceiver DI!");
    }
}

3. ContentProvider 예제

Kotlin

@EntryPoint
@InstallIn(SingletonComponent::class)
interface MyEntryPoint {
    fun messageHelper(): MessageHelper
}

class MyProvider : ContentProvider() {
    override fun onCreate(): Boolean {
        val entryPoint = EntryPointAccessors.fromApplication(context!!, MyEntryPoint::class.java)
        entryPoint.messageHelper().showToast("ContentProvider DI!")
        return true
    }
    // ... 기타 구현
}

Java

@EntryPoint
@InstallIn(SingletonComponent.class)
public interface MyEntryPoint {
    MessageHelper getMessageHelper();
}

public class MyProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        MyEntryPoint entryPoint = EntryPointAccessors.fromApplication(getContext(), MyEntryPoint.class);
        MessageHelper helper = entryPoint.getMessageHelper();
        helper.showToast("ContentProvider DI!");
        return true;
    }
    // ... 기타 구현
}

4. AlarmManager (BroadcastReceiver 통한 알람처리)

Kotlin

@EntryPoint
@InstallIn(SingletonComponent::class)
interface MyEntryPoint {
    fun messageHelper(): MessageHelper
}

class AlarmReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val entryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint::class.java)
        entryPoint.messageHelper().showToast("AlarmManager Broadcast DI!")
    }
}

Java

@EntryPoint
@InstallIn(SingletonComponent.class)
public interface MyEntryPoint {
    MessageHelper getMessageHelper();
}

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        MyEntryPoint entryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint.class);
        MessageHelper helper = entryPoint.getMessageHelper();
        helper.showToast("AlarmManager Broadcast DI!");
    }
}

이렇게 EntryPoint를 사용하면
Hilt가 관리하지 않는 시스템 컴포넌트에서도 DI 객체를 안전하게 사용할 수 있습니다.
모든 예제에서 EntryPoint 인터페이스 필요,
컴포넌트 내부에서 EntryPointAccessors 사용하여 객체 획득하는 것이 핵심 패턴
입니다.

출처

profile
Tech Phase-smith, Karax wannabe

0개의 댓글