[java] Jigsaw 모듈을 사용한 애플리케이션 개발 사례

Jigsaw는 Java 9부터 도입된 모듈 시스템으로, 애플리케이션 개발을 더 모듈화하고 격리된 환경을 구축할 수 있게 해줍니다. 이번 포스팅에서는 Jigsaw 모듈을 사용하여 간단한 애플리케이션을 개발하는 사례를 살펴보겠습니다.

프로젝트 구조

우리의 애플리케이션은 “Hello, World!”를 출력하는 기능을 가진 모듈과 이를 사용하는 메인 모듈로 구성됩니다. 프로젝트 구조는 다음과 같습니다.

myapp
├── src
│   ├── com.myapp
│   │   └── HelloWorld.java
│   └── module-info.java
└── out
    └── mods

HelloWorld 모듈 개발

우리의 애플리케이션을 구성하는 첫 번째 모듈은 HelloWorld 모듈입니다. 이 모듈은 매우 간단한 기능을 가지고 있으며, “Hello, World!”를 출력하는 기능을 제공합니다.

우선 HelloWorld.java 파일을 다음과 같이 생성합니다.

package com.myapp;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

그리고 module-info.java 파일에 모듈 정보를 작성합니다.

module com.myapp {
    // 모듈에 속하는 클래스를 지정합니다.
    exports com.myapp;
}

메인 모듈 개발

이제 메인 모듈을 개발해보겠습니다. 이 모듈은 HelloWorld 모듈을 사용하여 “Hello, World!”를 출력하는 기능을 가지고 있습니다.

일단 module-info.java 파일을 다음과 같이 작성합니다.

module com.mainapp {
    // HelloWorld 모듈을 사용하기 위해 requires 문을 추가합니다.
    requires com.myapp;
}

그리고 메인 클래스인 MainApp.java 파일을 생성하고 다음과 같이 작성합니다.

package com.mainapp;

import com.myapp.HelloWorld;

public class MainApp {
    public static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.main(args);
    }
}

어플리케이션 실행

이제 어플리케이션을 빌드하고 실행해보겠습니다.

  1. myapp 디렉토리로 이동합니다.
  2. 다음 명령어로 HelloWorld 모듈을 컴파일합니다.
    javac -d out/mods/com.myapp src/com.myapp/module-info.java src/com.myapp/HelloWorld.java
    
  3. 다음 명령어로 MainApp 모듈을 컴파일합니다.
    javac -mp out/mods -d out/mods/com.mainapp src/com.mainapp/module-info.java src/com.mainapp/MainApp.java
    
  4. 다음 명령어로 MainApp 모듈을 실행합니다.
    java -mp out/mods -m com.mainapp/com.mainapp.MainApp
    

출력 결과는 다음과 같아야 합니다.

Hello, World!

결론

이번 포스팅에서는 Jigsaw 모듈을 사용하여 간단한 애플리케이션을 개발하는 사례를 살펴보았습니다. Jigsaw 모듈을 사용하면 애플리케이션을 더 모듈화하고 격리된 환경을 구축할 수 있으며, 애플리케이션의 유지보수와 확장성을 크게 향상시킬 수 있습니다.