학습
Java 모듈 시스템 (JPMS)
Java 모듈 시스템 (JPMS) — 중급
모듈 시스템 (JPMS)
1. 도입 (왜 배워야 하는가)
Java Platform Module System (JPMS)은 Java 9에서 도입된 새로운 모듈 시스템으로, 대규모 애플리케이션을 개발하는 데 있어 중요한 역할을 합니다. 실무에서 여러 개발자들이 같은 코드를 작업할 때, 모듈 시스템을 통해 코드의 의존성을 명확히 하고, 각 모듈 간의 접근 제어를 설정할 수 있습니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.
JPMS를 모르면, 대규모 프로젝트에서 의존성 충돌이나 모듈 간의 불필요한 의존으로 인해 문제가 발생할 수 있습니다. 특히, 다양한 라이브러리와 프레임워크가 존재하는 환경에서는 이러한 문제가 더욱 두드러집니다. 예를 들어, A 모듈이 B 모듈을 필요로 하며, B 모듈이 C 모듈을 필요로 할 때, 이러한 의존성을 제대로 관리하지 않으면 컴파일 오류가 발생하거나 런타임 오류가 발생할 수 있습니다.
2. 핵심 개념 설명
JPMS의 핵심 개념은 다음과 같습니다:
- 모듈: 코드와 리소스의 집합으로, 특정 기능을 제공하는 단위입니다. 마치 책이 여러 장으로 구성되어 있는 것처럼, 모듈은 여러 클래스를 포함할 수 있습니다.
- 모듈 선언: 모듈은
module-info.java파일을 통해 선언됩니다. 이 파일에는 해당 모듈이 어떤 패키지를 내보내고(import) 어떤 패키지를 사용할지(require) 명시합니다. - 의존성 관리: 각 모듈은 다른 모듈에 대한 의존성을 명확하게 정의할 수 있습니다. 이는 마치 요리 레시피에서 필요한 재료를 명시하는 것과 같습니다.
module com.example.helloworld { ... }: 모듈을 선언합니다. 이 모듈은com.example.helloworld라는 이름을 가지고 있습니다.exports com.example.helloworld;: 이 모듈이com.example.helloworld패키지를 외부에 공개한다는 의미입니다.public class HelloWorld { ... }:HelloWorld라는 클래스를 정의합니다.System.out.println("Hello, World!");: 콘솔에 "Hello, World!"를 출력합니다.- 쇼핑몰 장바구니 구현
- 사용자 인증
- 모듈 선언 누락
- 패키지 내보내기 오류
- JPMS는 Java 애플리케이션의 모듈화를 지원하여 코드의 재사용성과 유지보수성을 높입니다.
- 모듈은
module-info.java파일을 통해 선언되며, 의존성을 명확하게 관리할 수 있습니다. - 실무에서는 쇼핑몰 장바구니, 사용자 인증과 같은 다양한 모듈화 예제를 활용할 수 있습니다.
| 용어 | 설명 |
|---|---|
| 모듈 | 코드와 리소스의 집합 |
| 모듈 선언 | module-info.java 파일을 통한 모듈 정의 |
| 의존성 | 모듈 간의 관계를 정의 |
3. 기본 코드 예제
아래의 코드는 간단한 모듈을 생성하는 코드입니다.
// module-info.java
module com.example.helloworld {
exports com.example.helloworld;
}
// HelloWorld.java
package com.example.helloworld;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
실행 결과
Hello, World!
코드 동작 설명
4. 실전 활용 예제
- 쇼핑몰 시스템에서 장바구니 기능을 모듈로 분리하여 구현할 수 있습니다. 예를 들어, shoppingcart 모듈과 product 모듈을 만들고, shoppingcart 모듈에서 product 모듈을 의존하게 할 수 있습니다.
- 사용자 인증을 위한 authentication 모듈과 데이터베이스 연결을 위한 database 모듈을 생성하여, 인증 모듈이 데이터베이스 모듈에 의존하도록 구성할 수 있습니다.
5. 흔한 실수와 주의사항
- 잘못된 코드: HelloWorld.java 파일에 module-info.java가 없다면, 모듈로 인식되지 않습니다.
- 올바른 코드: 반드시 module-info.java 파일을 작성해야 합니다.
- 잘못된 코드: exports com.example;로 잘못 내보내기.
- 올바른 코드: exports com.example.helloworld;로 정확히 내보내야 합니다.
6. 정리
다음에 학습하면 좋은 주제로는 Java의 서비스 로케이터 패턴이나 DI(Dependency Injection) 프레임워크에 대해 알아보는 것이 좋습니다.