Java 9에서 도입된 모듈 시스템(Module System)은 대규모 애플리케이션을 효율적으로 관리하고 유지보수할 수 있도록 설계되었습니다. 이를 통해 불필요한 코드 의존성을 줄이고, 더 안전하고 성능이 뛰어난 애플리케이션을 개발할 수 있습니다. 이번 글에서는 Java 모듈 시스템의 개념과 사용법을 심화적으로 다루어 보겠습니다.
1. Java 모듈 시스템이란?
Java의 모듈 시스템은 여러 개의 독립적인 모듈로 애플리케이션을 구성하는 방법을 제공합니다. 기존의 JAR
파일을 사용하는 방식과 달리, 모듈 시스템은 명확한 의존성 관리와 캡슐화를 제공합니다.
모듈 시스템의 주요 특징:
module-info.java
파일을 통해 모듈 간의 관계를 정의합니다.2. Java 모듈의 기본 구조
Java 모듈 시스템을 사용하려면 module-info.java
파일을 추가해야 합니다. 기본적인 모듈 구조는 다음과 같습니다:
myapp/
├── src/
│ ├── module-info.java
│ ├── com.myapp/
│ │ ├── Main.java
모듈 정의 (module-info.java)
module com.myapp {
requires java.base; // 기본 Java 라이브러리
exports com.myapp; // com.myapp 패키지를 외부에서 접근 가능하도록 설정
}
메인 클래스 (Main.java)
package com.myapp;
public class Main {
public static void main(String[] args) {
System.out.println("Java 모듈 시스템 예제");
}
}
이제 javac
와 java
명령어를 사용하여 모듈 기반 애플리케이션을 실행할 수 있습니다.
3. 모듈 간 의존성 관리
모듈 시스템에서는 특정 모듈이 다른 모듈을 참조하려면 requires
키워드를 사용하여 명시적으로 선언해야 합니다.
예제: 두 개의 모듈 간 의존성
app/
├── src/
│ ├── module-info.java
│ ├── com.app/
│ │ ├── App.java
library/
├── src/
│ ├── module-info.java
│ ├── com.library/
│ │ ├── Library.java
라이브러리 모듈 (library/module-info.java)
module com.library {
exports com.library;
}
라이브러리 클래스 (Library.java)
package com.library;
public class Library {
public static String getMessage() {
return "Hello from Library!";
}
}
애플리케이션 모듈 (app/module-info.java)
module com.app {
requires com.library;
}
애플리케이션 클래스 (App.java)
package com.app;
import com.library.Library;
public class App {
public static void main(String[] args) {
System.out.println(Library.getMessage());
}
}
이제 javac
명령어를 사용하여 두 모듈을 컴파일하고 실행할 수 있습니다.
4. requires
, exports
, opens
키워드
Java 모듈 시스템에서 사용되는 주요 키워드는 다음과 같습니다:
requires
: 다른 모듈을 참조할 때 사용합니다.exports
: 해당 패키지를 외부에서 사용할 수 있도록 공개합니다.opens
: 리플렉션(Reflection) 기반 접근을 허용합니다.provides ... with
: 서비스 제공자를 등록할 때 사용됩니다.예제: opens
키워드 사용
module com.example {
opens com.example to java.logging;
}
이렇게 하면 java.logging
모듈이 com.example
패키지를 리플렉션을 통해 접근할 수 있도록 허용됩니다.
5. 모듈 시스템의 장점과 단점
장점:
module-info.java
를 통해 의존성을 명확하게 설정할 수 있습니다.단점:
JAR
기반 애플리케이션과 통합 시 일부 라이브러리에서 문제가 발생할 수 있습니다.6. 실무에서의 Java 모듈 시스템 활용
결론
Java 모듈 시스템은 대규모 애플리케이션의 유지보수를 용이하게 하고, 보안성과 성능을 향상시키는 중요한 기능입니다. module-info.java
를 활용하여 명확한 의존성을 정의하고, 불필요한 요소를 캡슐화하여 더 안정적인 Java 애플리케이션을 개발해 보시길 바랍니다. 감사합니다.
오키나와 나하공항에 도착하거나 돌아가는 길, 바쁜 비행 일정에 쫓겨 허겁지겁 평범한 음식으로 끼니를 대충 때우신…
간사이 여행을 계획 중이신가요? 오사카, 교토, 고베를 아우르는 간사이 지역 여행에서 가장 중요한 필수품이 바로…
일본으로의 여행을 꿈꾸며 설레는 마음으로 출발을 준비할 때, 반드시 잊지 말아야 할 부분이 있습니다. 그것은…
일본여행의 준비 청소년 시기, 가장 많이 꿈꾸는 ‘해외여행’. 그 중에서도 한국에서 가깝고 볼거리·즐길거리도 다양해 많은…