Java 11의 모듈 시스템(Jigsaw) 소개 및 활용
Java 11의 모듈 시스템, Jigsaw(지그쏘)는 자바 애플리케이션의 구조와 성능을 개선하기 위해 도입된 기능입니다. 이 글에서는 Jigsaw의 개념과 기본 사용법을 소개하고, 실제 프로젝트에서 어떻게 활용할 수 있는지 알아봅니다.
Jigsaw란?
Jigsaw는 자바 9에서 처음 도입된 모듈 시스템으로, 애플리케이션을 작은 단위의 모듈로 나누어 개발하고 배포하는 것을 지원합니다. Jigsaw의 도입으로 인해 자바 애플리케이션의 구조가 더 명확해지고, 런타임 성능이 향상되었습니다.
모듈 시스템의 주요 목표는 다음과 같습니다.
- 구조화된 애플리케이션 개발: 애플리케이션을 여러 모듈로 나누어 개발하고 관리할 수 있습니다.
- 강력한 캡슐화: 모듈 내부의 구현 세부 사항을 외부로 노출하지 않고, 명시적으로 공개된 API만 사용할 수 있도록 합니다.
- 모듈 간의 명확한 의존성 관리: 모듈 간의 의존성을 명시적으로 선언하므로, 빌드와 배포 시 문제를 쉽게 파악할 수 있습니다.
모듈 생성하기
모듈을 생성하려면 먼저 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는 더 많은 고급 기능을 제공하므로 깊이 있는 학습을 통해 프로젝트에 더욱 효과적으로 활용할 수 있습니다.
'자기개발 > 검색한 자료 정리' 카테고리의 다른 글
JavaScript의 이벤트 루프와 비동기 처리 이해하기 (0) | 2023.04.24 |
---|---|
Java에서 디자인 패턴 실전 적용 사례 (0) | 2023.04.23 |
CSS 프레임워크 Bootstrap과 Tailwind CSS 비교 (1) | 2023.04.23 |
Java와 JavaScript의 형변환, 자료형 비교 (1) | 2023.04.23 |
Git에서 원격 저장소 설정과 관리하기 (0) | 2023.04.22 |