배경
현재 프로젝트에 테스트 코드를 도입하려고 여러 자료를 공부하는 와중에 nowinandroid testing 모듈에 대한 의존성 설정에 대한 의문점이 들었습니다. A -> B, B -> A에 대한 의존성을 가질 때 순환참조가 발생하게 되는데 왜 발생하지 않을까? 라는 의문이 들었고 한번 내용을 정리해보고자 합니다. 순환참조에 대한 개념은 이 링크를 참고해주세요!
implementation의 종류
implementation의 종류에는 implementation, testImplementation, androidTestImplementation, debugImplementation이 있습니다. 앞에 붙은 이름은 각 라이브러리들이 적용될 범위를 뜻합니다.
애플리케이션을 개발할 때 릴리즈, 디버그, 테스트 범위별로 다른 라이브러리가 들어가야 하는데 설정을 잘못한다면 불필요한 라이브러리가 릴리즈에 들어갈 때 앱 번들의 크기가 커질 수 있습니다.
대표적인 scope는 다음과 같습니다.
Scope | keyword |
compile | implementation, api |
compile only | compileOnly |
debug | debugImplementation |
runtime | runtimeOnly |
test | testImplementation, testCompileOnly, testRunTimeOnly |
android test | androidTestImplementation |
그렇다면 왜 순환참조는 발생하지 않는걸까?
implementation으로 각각 test1, test2가 서로 알도록 의존성을 설정한 후 sync를 해줄 때는 문제가 없습니다.
하지만 빌드를 할 경우엔 다음과 같은 에러가 발생합니다.
결론적으로는 debug, release 단계에서 순환참조를 발견될 경우 에러를 발생시키는 것이고, test를 할 때는 bundle에 영향을 전혀 주지 않기 때문에 에러가 발생하지 않습니다.
따라서 nowinandroid처럼 testing 모듈에 대해 의존성을 가져도 크게 문제되지 않는 것입니다.
<참고>
'Android' 카테고리의 다른 글
[Android] Multi-Module 구조에서 Navigation을 구현하자 (with DeepLink) (0) | 2023.09.19 |
---|---|
[Android] 'excludes' is deprecated (0) | 2023.09.19 |
[Android] Compose Navigation + Stateflow를 쓰는데 왜 리컴포지션이 계속 발생하지..? (1) (0) | 2023.08.07 |
[Android] ViewModelScope 제대로 알고 사용하는걸까? (0) | 2023.07.29 |
[Android] strings.xml에서 %d%를 해결하는 방법 (1) | 2023.07.02 |
댓글