안드로이드 모듈 간 리소스 충돌 방지: 리소스 ID와 모듈 의존성

2025. 3. 5. 16:23Android/Android 기초

728x90
반응형

안드로이드 프로젝트에서 여러 모듈을 사용하는 경우, 리소스 충돌을 피하기 위한 전략이 중요하다.

특히 string, drawable, color와 같은 리소스 파일을 다룰 때,

리소스 ID가 어떻게 관리되는지 모듈 간 의존성에 대한 이해가 필요하다.

 

1. 리소스 ID는 이름과 위치에 따라 결정된다.

안드로이드에서 각 리소스(string, drawable, color 등)에 대해 고유한 ID가 자동으로 할당된다.

이 ID는 리소스 이름과 해당 리소스가 위치한 모듈에 따라 결정된다.

따라서 동일한 리소스 이름을 가진 string 파일이 core 모듈과 feature 모듈에 존재한다면,

각 모듈에 대해 각각의 ID가 할당된다.

 

2. 리소스 이름이 같으면 동일한 ID가 할당된다.

하지만 모듈마다 ID가 부여될 뿐, 그 ID가 유일하다고 볼 수 없다.

만약 리소스의 이름이 같으면 동일한 ID가 할당된다.

이렇게 되면, 최상위 모듈에 해당 리소스를 사용할 때 어떤 모듈의 리소스를 사용할지에 따라 우선순위가 정해진다.

그렇기에 리소스 이름은 feature_{name} 식으로 고유하게 만들어주는 것이 중요하다.

 

3. Core 모듈에서는 Feature 모듈의 리소스를 가져올 수 있을까?

우리는 일반적으로 core/ui 모듈에 공통 로직을 저장한다.

예를 들어 Text UI를 저장할 경우, text 값은 파라미터로 넘겨 받는 형식이다.

@StringRes 파라미터를 사용할 때 core 모듈은 feature 모듈의 string을 어떻게 가져올 수 있을까?

  • core 모듈은 feature 모듈을 직접 참조하지 않는다.
  • 따라서 core 모듈이 직접적으로 feature 모듈의 string을 가져올 수 없다.
  • 그렇지만 feature 모듈에서 전달 받은 리소스를 사용하도록 설계할 수 있다.

정리하자면 core 모듈은 feature 모듈이 전달하는 R.string.{text} 가 무엇인지 모른다.

하지만 feature 모듈이 호출하는 시점에서 R.string.{text}의 ID를 core 모듈에게 넘길 수 있다.

core 모듈은 전달 받은 리소스 ID를 기반으로 참조한다.

 

그래서 파라미터를 넘길 때는 String Resource라는 @StringRes를 필히 명시해줘야 한다.

 

728x90
반응형