본문으로 건너뛰기

Modules

1 Modules

  • 자바 9에서 가장 많이 거론되는 새로운 기능
  • 새로운 자바 모듈 시스템이 어디에 사용될 수 있고 개발자는 이로부터 이떤 이익을 얻을 수 있는지 알아보자
  • Module 시스템을 사용하면 관심사를 분리할 수 있고 정보를 은닉할 수 있다

1.1 관심사분리

  • 관심사분리는 컴퓨터 프로그램을 고유의 기능으로 나누는 동작을 의미한다
  • 회계 애플리케이션을 예로 들면 파싱, 분성, 레포트 기능을 모듈이라는 각각의 부분 즉 겹치지 않는 코드 그룹으로 분리할 수 있다
  • 관심사분리를 통해 얻을 수 있는 것
    • 개별 기능을 따로 작업할 수 있으므로 팀이 쉽게 협업할 수 있다
    • 개별 부분을 재사용하기 쉽다
    • 전체 시스템을 쉽게 유지보수할 수 있다

1.2 정보 은닉

  • 정보 은닉은 세부 구현을 숨기도록 장려하는 원칙이다
  • 세부 구현을 숨긴 코드를 수정했을 때 이 영향이 외부까지 미칠 가능성을 줄여준다
  • 정보 은닉을 캡슐화라고도 한다
  • 캡슐화는 특정 코드 조각이 애플리케이션의 다른 부분과 고립되어 있어 캡슐화 된 코드 조각의 변화가 외부에 영향을 미칠 가능성을 줄이는 것이다

모듈 디스크립터

  • 모듈 디스크립터의 위치는 src/main/java 디렉토리에 위치해야 한다.

2 모듈명

  • 인터넷 도메인명을 역순으로 모듈의 이름을 지정한다
  • 모듈명은 노출된 주요 API 패키지와 이름이 같아야한다

컴파일과 패키징

  • 그래들과 같은 빌드 도구를 이용해 프로젝트를 컴파일할 수 있다
  • 모듈은 독립적으로 컴파일되므로 자체적으로 각각이 한 개의 프로젝트다
  • 따라서 각각 build.gradle을 추가해야한다
  • 전체 프로젝트 빌드를 조정할 수 있도록 모든 모듈의 부모 모듈에도 build.gradle을 추가한다

Gradle Multi module