💡 의존성이란?
의존성은 프로젝트가 외부 라이브러리나 모듈에 의존하고 있는 관계를 의미합니다. 주로 build.gradle 파일의 dependencies 블록을 통해 설정합니다.
1. Compile 시점 의존성
- 컴파일 단계에서 필요한 라이브러리입니다.
- 코드 작성 시 해당 라이브러리의 API를 사용할 수 있습니다.
2. Runtime 시점 의존성
- 실행 단계에서만 필요한 라이브러리입니다.
- 컴파일에는 영향을 주지 않지만, 프로그램이 실행될 때 반드시 존재해야 합니다.
3. 은닉성 (Encapsulation)
- implementation으로 추가한 의존성은 외부 모듈에 노출되지 않습니다.
- 이를 통해 모듈 간 결합도를 낮추고 캡슐화를 강화할 수 있습니다.
💡 주요 의존성 옵션 (in build.gradle)
옵션설명사용 예
implementation | 컴파일과 런타임 모두 필요하지만, 외부에 노출되지 않는 의존성 | 대부분의 내부 라이브러리 |
api | implementation과 유사하지만, 다른 모듈에도 전파됨 (외부에 공개됨) | 공통 유틸리티 모듈 |
runtimeOnly | 런타임에만 필요하고 컴파일 시점엔 필요 없는 의존성 | JDBC 드라이버, SLF4J 구현체 |
compileOnly | 컴파일 시점에만 필요, 런타임엔 불필요 | 애노테이션 프로세서 |
testImplementation | 테스트 코드 작성 및 실행 시에만 필요 | JUnit, Mockito 등 |
✨ 추가 팁
팁 1: implementation을 기본값으로 사용하세요. api는 정말 필요한 경우에만 사용합니다 (라이브러리 설계 시).
팁 2: 의존성 충돌이 발생할 수 있으니 dependencyInsight, dependencies 태스크로 분석해보세요.
팁 3: runtimeOnly을 사용할 땐 해당 라이브러리가 누락되면 NoClassDefFoundError가 발생할 수 있으니 주의하세요.
✨ 참고하면 좋은 사이트(개념, 비교,검색)
더보기