자기개발/검색한 자료 정리

Java 11의 모듈 시스템(Jigsaw) 소개 및 활용

실버블렛 2023. 4. 23. 15:00
반응형

Java 11의 모듈 시스템(Jigsaw) 소개 및 활용

Java 11의 모듈 시스템, Jigsaw(지그쏘)는 자바 애플리케이션의 구조와 성능을 개선하기 위해 도입된 기능입니다. 이 글에서는 Jigsaw의 개념과 기본 사용법을 소개하고, 실제 프로젝트에서 어떻게 활용할 수 있는지 알아봅니다.

Jigsaw란?

Jigsaw는 자바 9에서 처음 도입된 모듈 시스템으로, 애플리케이션을 작은 단위의 모듈로 나누어 개발하고 배포하는 것을 지원합니다. Jigsaw의 도입으로 인해 자바 애플리케이션의 구조가 더 명확해지고, 런타임 성능이 향상되었습니다.

모듈 시스템의 주요 목표는 다음과 같습니다.

  1. 구조화된 애플리케이션 개발: 애플리케이션을 여러 모듈로 나누어 개발하고 관리할 수 있습니다.
  2. 강력한 캡슐화: 모듈 내부의 구현 세부 사항을 외부로 노출하지 않고, 명시적으로 공개된 API만 사용할 수 있도록 합니다.
  3. 모듈 간의 명확한 의존성 관리: 모듈 간의 의존성을 명시적으로 선언하므로, 빌드와 배포 시 문제를 쉽게 파악할 수 있습니다.

모듈 생성하기

모듈을 생성하려면 먼저 module-info.java 파일을 작성해야 합니다. 이 파일은 모듈의 구성 요소와 의존성을 정의합니다.

예를 들어, my.module이라는 이름의 모듈을 생성하려면 다음과 같이 작성합니다.

module my.module {
    exports com.example.mypackage;
    requires java.logging;
}

위 코드에서 exports 키워드를 사용하여 com.example.mypackage 패키지를 공개하고, requires 키워드를 사용하여 java.logging 모듈에 대한 의존성을 선언합니다.

모듈을 사용하는 애플리케이션 작성하기

모듈이 준비되면 다른 애플리케이션에서 사용할 수 있습니다. 예를 들어, 애플리케이션에서 my.module을 사용하려면 다음과 같이 작성합니다.

module my.application {
    requires my.module;
}

위 코드에서 requires 키워드를 사용하여 my.module에 대한 의존성을 선언합니다. 이제 애플리케이션에서 my.module의 공개된 API를 사용할 수 있습니다.

모듈 경로와 컴파일

모듈을 컴파일하려면 javac 명령어에 --module-path 옵션을 사용하여 모듈 경로를 지정해야 합니다. 모듈 경로는 모듈이 위치한 디렉토리를 가리킵니다.

예를 들어, my.module과 my.application이 modules 디렉토리에 위치한 경우 다음과 같이 컴파일합니다.

javac --module-path modules -d output my.module/module-info.java my.module/com/example/mypackage/MyClass.java
javac --module-path modules -d output my.application/module-info.java my.application/com/example/myapp/MyApp.java

위 명령어는 modules 디렉토리에 있는 모듈을 참조하여 컴파일하고, 결과를 output 디렉토리에 저장합니다.

애플리케이션 실행하기

모듈화된 애플리케이션을 실행하려면 java 명령어에 --module-path 옵션과 --module 옵션을 사용하여 모듈 경로와 실행할 모듈을 지정해야 합니다.

예를 들어, my.application 모듈의 com.example.myapp.MyApp 클래스를 실행하려면 다음과 같이 작성합니다.

java --module-path output --module my.application/com.example.myapp.MyApp

위 명령어는 output 디렉토리에 있는 모듈을 참조하여 my.application 모듈의 com.example.myapp.MyApp 클래스를 실행합니다.

결론

Java 11의 Jigsaw 모듈 시스템은 애플리케이션의 구조와 성능을 개선하고, 코드 재사용성을 높여주는 강력한 도구입니다. 이 글에서는 기본적인 모듈 시스템의 사용법을 소개했지만, Jigsaw는 더 많은 고급 기능을 제공하므로 깊이 있는 학습을 통해 프로젝트에 더욱 효과적으로 활용할 수 있습니다.

반응형