IT/java

모듈화 이용하기 ( JDK21 )

가능성1g 2025. 6. 19. 11:04
반응형

JDK9 부터 도입된 모듈화 이지만,

잘 사용하지 않기도 해서 익숙하지가 않습니다.  그래도 이젠 익숙해져야 하기에!!  나름 정리를  해봅니다.

 

* 단순 모듈화 프로젝트 구조

 

소스(src) 폴더 하위에 모듈단위로 폴더를 만들고, 모듈의 최상휘에 module-info.java 를 만든다.

module-info.java 의 사용법

module 모듈 이름 {
    requires 필요한 모듈
    exports 공개할 패키지
}

 

프로젝트 소스 구조

your_project_root/
├── src/
│   ├── mod_main/
│   │   ├── module-info.java
│   │   └── kr/soen/main/
│   │       └── Main.java
│   └── mod_util/
│       ├── module-info.java
│       └── kr/soen/util/
│           └── Util.java
└── (bin/ 디렉토리는 아직 생성 전)

 

// src\mod_util\module-info.java
module mod_util { // 모듈 이름은 정확히 'mod_util'이어야 합니다.
    exports kr.soen.util; // 'Util' 클래스가 있는 패키지를 외부에 공개합니다.
}

 

// src\mod_main\module-info.java
module mod_main { // 모듈 이름은 정확히 'mod_main'이어야 합니다.
    requires mod_util; // 'mod_util' 모듈에 의존합니다.
    // Main.java가 특정 패키지에 있다면 해당 패키지를 열거나 내보낼 필요는 없습니다.
}

 

// src\mod_main\kr\soen\main\Main.java
package kr.soen.main;

import kr.soen.util.Util; // Util 클래스를 import 합니다.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello from mod_main!"); // 오타 수정 확인!
        System.out.println(Util.add(1, 2)); // mod_util의 Util.add() 사용
    }
}

 

// src\mod_util\kr\soen\util\Util.java
package kr.soen.util;

public class Util {
    public static int add(int a, int b) {
        return a+b;
    }
}

 

 

컴파일 및 실행 ( 컴파일시 폴더 자동 생성 )

## 컴파일
javac --module-source-path src -d bin\mod_util src\mod_util\module-info.java src\mod_util\kr\soen\util\Util.java
javac --module-source-path src --module-path bin -d bin src\mod_main\module-info.java src\mod_main\kr\soen\main\Main.java

## 실행
java --module-path bin --module mod_main/kr.soen.main.Main

 

컴파일시, 컴파일 트리 구조

your_project_root/
└── bin/
    ├── mod_main/          
    │   ├── kr/
    │   │   └── soen/
    │   │       └── main/
    │   │           └── Main.class
    │   └── module-info.class
    └── mod_util/
        ├── kr/
        │   └── soen/
        │       └── util/
        │           └── Util.class
        └── module-info.class

 

eclipse 도 vscode 도 모듈에 대해서는 정상으로 잘되지 않아서 빨간색 밑줄이 자꾸 그어집니다...

그래도 실행 완성!

 

반응형