0Pricing
Java Academy · 강의

모듈로 마이그레이션

자동 모듈과 이름 없는 모듈을 알아봅니다

모듈로 마이그레이션은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

기존 코드 모듈화

처음부터 모듈을 도입하는 프로젝트는 많지 않습니다. JPMS는 점진적 이전을 위해 설계되었으므로 클래스패스와 모듈 경로를 함께 사용할 수 있습니다.

핵심은 자동 모듈과 이름 없는 모듈입니다.

이름 없는 모듈

클래스패스에서 로드되는 모든 것은 하나의 이름 없는 모듈에 속합니다. 이 모듈은 다른 모든 모듈을 읽고 모든 패키지를 공개합니다.

이것이 레거시 클래스패스 코드가 계속 작동하도록 유지하는 다리입니다.

이름 있는 모듈은 이름 없는 모듈을 읽을 수 없음

중요한 규칙이 있습니다. 명시적으로 이름이 지정된 모듈은 이름 없는 모듈에 의존할 수 없습니다. 클래스패스 코드에 대해 requires를 작성할 수 없습니다.

따라서 아래에서 위로 이전해야 합니다. 먼저 의존성의 표현 방식을 변환해야 합니다.

자동 모듈

일반 JAR(모듈식이 아닌 JAR)을 모듈 경로에 배치하면 자동 모듈이 됩니다. 자동으로 파생된 이름을 얻고, 다른 모든 모듈을 읽으며, 모든 패키지를 공개합니다.

이를 통해 이름 있는 모듈에서 아직 module-info가 없는 JAR를 requires할 수 있습니다.

이름의 출처

자동 모듈의 이름은 다음 우선순위에 따라 파생됩니다.

  • 있는 경우 JAR 매니페스트의 Automatic-Module-Name 항목
  • 그렇지 않으면 JAR 파일 이름에서 파생됩니다(버전은 제거하고 하이픈은 점으로 변환).

안정적인 이름의 중요성

라이브러리 작성자는 완전히 모듈화하기 전에 매니페스트에 Automatic-Module-Name을 추가해야 합니다. 이렇게 하면 안정적인 모듈 이름이 보장되므로, 나중에 실제 module-info를 추가해도 하위 모듈의 requires 절이 유지됩니다.

Automatic-Module-Name: com.example.json

하향식 전략

자체 애플리케이션에는 다음 접근 방식을 권장합니다.

  • 의존성을 모듈 경로에서 자동 모듈로 유지합니다.
  • 여러분의 최상위 모듈에 먼저 module-info.java를 추가합니다.
  • 해당 자동 모듈 이름에 대해 requires를 선언합니다.

이전 단계 예제

guava-32.jar가 자동 모듈 com.google.common으로 모듈 경로에 있다고 가정해 보겠습니다. 애플리케이션 모듈은 이미 이 모듈을 필요로 할 수 있습니다.

module com.example.app {
    requires com.google.common;
    exports com.example.app.api;
}

분할 패키지 문제

모듈 시스템은 두 모듈이 동일한 패키지를 포함하는 것을 금지합니다. 여러 JAR에 걸쳐 하나의 패키지를 나누는 오래된 라이브러리는 오류를 일으킵니다.

JAR를 병합하거나 --patch-module을 사용하거나, 이 문제를 해결한 버전으로 업그레이드하여 수정할 수 있습니다.

리플렉션 접근 문제

깊은 리플렉션을 수행하는 프레임워크는 모듈화한 후 InaccessibleObjectException과 함께 실패할 수 있습니다. opens 지시문을 추가하거나, 임시 연결 방법으로 --add-opens 실행 플래그를 사용하십시오.

유용한 jdeps 도구

jdeps 도구는 JAR를 분석하고, 의존성을 보고하며, 내부 JDK API 사용을 표시하고, jdeps --generate-module-info를 사용하여 후보 module-info.java까지 생성할 수 있습니다.

이전 계획을 세우기 전에 먼저 실행해 보십시오.

빠른 확인

일반 JAR가 모듈 정체성을 얻는 방법을 떠올려 보십시오.

복습

이전 기법을 배웠습니다.

  • 클래스패스 코드는 이름 없는 모듈에 속하며, 이름 있는 모듈은 이를 필요로 할 수 없습니다.
  • 모듈 경로에 있는 일반 JAR는 자동 모듈이 됩니다.
  • 안정적인 이름을 위해 Automatic-Module-Name을 설정합니다.
  • 분할 패키지와 리플렉션 접근 문제에 주의하고, 계획을 세울 때 jdeps를 사용합니다.

이것으로 JPMS 과정을 마칩니다.

자주 묻는 질문

“모듈로 마이그레이션” 강의는 무료인가요?

네 — “모듈로 마이그레이션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“모듈로 마이그레이션”에서 뭘 배우나요?

자동 모듈과 이름 없는 모듈을 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“모듈로 마이그레이션” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. module-info.java
  2. requires와 exports
  3. provides/uses를 사용한 서비스
  4. 모듈로 마이그레이션
← Java Academy(으)로 돌아가기