requires와 exports
의존성과 가시성을 제어합니다
requires와 exports은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
모듈 그래프 제어
두 지시문이 모듈 그래프를 구성합니다. requires는 의존하는 대상을 선언하고, exports는 공개할 대상을 선언합니다.
이 강의에서는 이러한 지시문의 여러 형태와 그로 인해 만들어지는 읽기 가능성 및 접근 가능성 규칙을 살펴봅니다.
일반적인 의존 선언
단순한 requires X;는 “이 모듈이 X 모듈을 읽는다”는 뜻입니다. 코드에서 X가 공개한 공개 형식을 사용할 수 있지만, 여러분의 모듈을 사용하는 쪽에는 X에 관한 정보가 전달되지 않습니다.
module com.example.app {
requires java.sql;
}전이적 의존 선언
requires transitive Y;는 여러분을 읽는 모든 모듈도 Y를 읽는다는 뜻입니다. 이는 암시적 읽기 가능성이며, 여러분의 API가 Y의 형식을 공개할 때 유용합니다.
module com.example.api {
requires transitive java.sql;
}transitive 사용 시점
공개한 API의 메서드가 다른 모듈의 형식을 반환하거나 인수로 받을 때 transitive를 사용합니다. 그렇지 않으면 호출자는 자신의 requires 없이는 반환 형식의 이름조차 지정할 수 없습니다.
이를 사용하면 사용하는 쪽에서 중복 의존성을 선언하지 않아도 됩니다.
정적 의존 선언
requires static Z;는 컴파일 시에만 필요한 의존성을 선언합니다. 컴파일할 때는 모듈이 필요하지만 실행 시에는 선택 사항이므로, 주석 처리기나 선택적 통합에 적합합니다.
module com.example.app {
requires static com.example.annotations;
}일반적인 공개 선언
exports pkg;는 여러분의 모듈을 필요로 하는 모든 모듈이 pkg의 공개 형식을 읽을 수 있게 합니다.
module com.example.lib {
exports com.example.lib.api;
}한정된 공개 선언
한정된 공개 선언은 exports pkg to modA, modB;를 사용하여 특정 이름이 지정된 모듈에만 패키지를 공개합니다. 규모가 큰 시스템 내부에서 서로 협력하는 모듈에 유용합니다.
module com.example.core {
exports com.example.core.internal to com.example.web, com.example.batch;
}리플렉션을 위한 opens
exports는 공개 멤버에 대한 컴파일 시 및 실행 시 접근 권한을 부여합니다. 깊은 리플렉션(비공개 필드)을 사용하려면 대신 opens pkg;가 필요하며, Jackson이나 Hibernate 같은 프레임워크에서 사용합니다.
module com.example.model {
exports com.example.model;
opens com.example.model.entities to com.fasterxml.jackson.databind;
}개방형 모듈
모듈 전체에 리플렉션 접근 권한이 필요하다면(레거시 프레임워크에서 흔히 필요함) 해당 모듈을 open으로 선언합니다. 그러면 모든 패키지가 리플렉션에 개방되지만, 일반적인 exports는 여전히 컴파일 시 접근을 제어합니다.
open module com.example.beans {
requires java.logging;
}읽기 가능성과 접근 가능성 비교
다른 모듈의 형식을 사용하려면 다음 두 조건이 모두 충족되어야 합니다.
- 읽기 가능성: 여러분의 모듈이 해당 모듈을
requires해야 합니다. - 접근 가능성: 해당 모듈이 패키지를
exports하고 형식이 공개되어 있어야 합니다.
둘 중 하나라도 충족하지 못하면 컴파일러가 코드를 거부합니다.
함께 구성하기
JDBC 형식을 다시 공개하고 JSON 라이브러리를 위해 엔터티를 개방하는 올바르게 구성된 모듈입니다.
module com.example.service {
requires transitive java.sql;
requires static com.example.annotations;
exports com.example.service.api;
exports com.example.service.spi to com.example.plugins;
opens com.example.service.dto to com.fasterxml.jackson.databind;
}빠른 확인
다시 공개할 API 형식에 사용할 지시문을 고르십시오.
복습
의존성과 가시성을 지정하는 지시문을 배웠습니다.
requires,requires transitive,requires staticexports와 한정된exports ... to- 리플렉션을 위한
opens와open module - 사용하려면 읽기 가능성과 접근 가능성이 모두 필요합니다.
다음에는 provides와 uses를 사용하여 서비스로 결합도를 낮추는 방법을 살펴봅니다.
AI 튜터와 함께 Java을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 104
- 레슨
- 374
자주 묻는 질문
“requires와 exports” 강의는 무료인가요?
네 — “requires와 exports” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“requires와 exports”에서 뭘 배우나요?
의존성과 가시성을 제어합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“requires와 exports” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- module-info.java
- requires와 exports
- provides/uses를 사용한 서비스
- 모듈로 마이그레이션