IMCAT.DEV
로그인 가입
Java 중급 도구

Java 모듈 시스템 (JPMS)

Java 모듈 시스템 (JPMS) — 중급

모듈 시스템 (JPMS)

1. 도입 (왜 배워야 하는가)

Java Platform Module System (JPMS)은 Java 9에서 도입된 새로운 모듈 시스템으로, 대규모 애플리케이션을 개발하는 데 있어 중요한 역할을 합니다. 실무에서 여러 개발자들이 같은 코드를 작업할 때, 모듈 시스템을 통해 코드의 의존성을 명확히 하고, 각 모듈 간의 접근 제어를 설정할 수 있습니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.

JPMS를 모르면, 대규모 프로젝트에서 의존성 충돌이나 모듈 간의 불필요한 의존으로 인해 문제가 발생할 수 있습니다. 특히, 다양한 라이브러리와 프레임워크가 존재하는 환경에서는 이러한 문제가 더욱 두드러집니다. 예를 들어, A 모듈이 B 모듈을 필요로 하며, B 모듈이 C 모듈을 필요로 할 때, 이러한 의존성을 제대로 관리하지 않으면 컴파일 오류가 발생하거나 런타임 오류가 발생할 수 있습니다.

2. 핵심 개념 설명

JPMS의 핵심 개념은 다음과 같습니다:

  1. 모듈: 코드와 리소스의 집합으로, 특정 기능을 제공하는 단위입니다. 마치 책이 여러 장으로 구성되어 있는 것처럼, 모듈은 여러 클래스를 포함할 수 있습니다.
  2. 모듈 선언: 모듈은 module-info.java 파일을 통해 선언됩니다. 이 파일에는 해당 모듈이 어떤 패키지를 내보내고(import) 어떤 패키지를 사용할지(require) 명시합니다.
  3. 의존성 관리: 각 모듈은 다른 모듈에 대한 의존성을 명확하게 정의할 수 있습니다. 이는 마치 요리 레시피에서 필요한 재료를 명시하는 것과 같습니다.
  4. 용어설명
    모듈코드와 리소스의 집합
    모듈 선언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!

    코드 동작 설명

    • 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!"를 출력합니다.
    • 4. 실전 활용 예제

    • 쇼핑몰 장바구니 구현
    • - 쇼핑몰 시스템에서 장바구니 기능을 모듈로 분리하여 구현할 수 있습니다. 예를 들어, shoppingcart 모듈과 product 모듈을 만들고, shoppingcart 모듈에서 product 모듈을 의존하게 할 수 있습니다.

    • 사용자 인증
    • - 사용자 인증을 위한 authentication 모듈과 데이터베이스 연결을 위한 database 모듈을 생성하여, 인증 모듈이 데이터베이스 모듈에 의존하도록 구성할 수 있습니다.

      5. 흔한 실수와 주의사항

    • 모듈 선언 누락
    • - 잘못된 코드: HelloWorld.java 파일에 module-info.java가 없다면, 모듈로 인식되지 않습니다. - 올바른 코드: 반드시 module-info.java 파일을 작성해야 합니다.

    • 패키지 내보내기 오류
    • - 잘못된 코드: exports com.example;로 잘못 내보내기. - 올바른 코드: exports com.example.helloworld;로 정확히 내보내야 합니다.

      6. 정리

    • JPMS는 Java 애플리케이션의 모듈화를 지원하여 코드의 재사용성과 유지보수성을 높입니다.
    • 모듈은 module-info.java 파일을 통해 선언되며, 의존성을 명확하게 관리할 수 있습니다.
    • 실무에서는 쇼핑몰 장바구니, 사용자 인증과 같은 다양한 모듈화 예제를 활용할 수 있습니다.

다음에 학습하면 좋은 주제로는 Java의 서비스 로케이터 패턴이나 DI(Dependency Injection) 프레임워크에 대해 알아보는 것이 좋습니다.