ServiceLoader는 consumer와 provider 구현을 module graph에서 연결한다

consumer가 구현 class를 직접 import하면 provider 교체와 선택이 compile dependency로 굳습니다.

  1. 1

    consumer module

    uses BoardExporter

  2. 2

    ServiceLoader.load

    service type로 조회

  3. 3

    resolved module graph

    provider module 포함

  4. 4

    provides … with

    implementation 등록

  5. 5

    provider instances

    0..N 반복

핵심: service interface와 descriptor 선언을 통해 runtime에 발견된 provider만 instance로 제공합니다.