2025. 3. 5. 16:23ㆍAndroid/Android 기초
안드로이드 프로젝트에서 여러 모듈을 사용하는 경우, 리소스 충돌을 피하기 위한 전략이 중요하다.
특히 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를 필히 명시해줘야 한다.
'Android > Android 기초' 카테고리의 다른 글
android:exported 속성 필수 이유 (Android 12 대응) (0) | 2025.03.24 |
---|---|
좀비 같은 Activity 처리하기, finish()와 finishAActivity()의 차이 (0) | 2025.03.10 |
[Android/Gradle]Gradle에서 APK 생성 타입 설정하기 (0) | 2023.02.24 |
[Android/Basic]BaseActivity (0) | 2023.02.24 |
[Android/Basic]Fragment Life Cycle (프래그먼트 생명 주기) (0) | 2021.07.24 |