자바 모듈 시스템

업데이트:

소프트웨어 유추

관심사분리

  • 프로그램을 고유의 기능으로 나누는 동작을 권장하는 원칙이다.
  • 서로 거의 겹치지 않는 코드 그룹으로 분리한다느 말이다.

SoC 원칙
모델, 뷰, 컨트롤러 같은 아키텍ㅊ처 관점 그리고 복구 기법을 비즈니스 로직과 분리하는 등의 하위 수전 접근 드으이 상황에 유용하다.

  • 개별 기능을 따로 작업할 수 있으므로 팀이 쉽게 협업할 수 있다.
  • 개별 부분을 재사용하기 쉽다
  • 전체 시스템을 쉽게 유지보수 할 수 있다.

정보 은닉

  • 세부 구현을 숨기도록 하는 원칙이다.
  • 세부 구현을 숨김으로써 어떤 부분을 바궛을때 다른 부분까지 영향을 미칠 가능성을 줄인다.

캡슐화
특정 코드 조각이 애플리케이션의 다른 부분과 고립되어 있음을 으미한다. 캡슐화된 코드의 내부적인 변화가 의도치 않게 외부에 영향을 미칠 가능성이 줄어든다.

자바 모듈 시스템을 설계한 이유

모듈화의 한계
자바 9 이전까지는 클래스, 패키지, JAR 세가지 수준의 코드 그룹화를 제공하는데 패키지와 JAR 수준에서는 캡슐화를 거의 지원하지 않는다.

  1. 제한된 가시성 제어
    • 한 패키지의 클래스와 인터페이슬르 다른 패키지로 공개하려면 public을 선언해야 한다.
    • 내부적으로 사용하기 위해만든 클래스지만 접근 제어자가 public이므로 다른 사용자가 마음대로 사용할 수 있다.
  2. 클래스의 경로
    • 클래스경로의 같은 클래스를 구분하는 버전 개념이 없어 버전이 다른 같은 라이브러리가 있는 경우 어떤 일이 일어날지 알 수 없다.
    • 클래스 경로는 명시적인 의존성을 지원하지 않느다.각각의 JAR 안의 모든 클래스는 classes라는 한 주머니로 합쳐저 jar간의 의존성을 지정할 수 없다.

자바 모듈 : 큰그림

  • 자바9에서는 자바 모듈이라는 새로운 자바 프로그램 구조 단위를 제공한다.
  • 모듈 디스크립터는 module-info.java 라는 특별한 파일에 저장된다.
    • 보통 패키지와 같은 폴더에 위치하며 한개 이상의 패키지를 서술하고 캡슐화 할 수 있지만 단순한 상황에서는 이들 패키지 중 한개만 외부로 노출시킨다.
    • module : 모듈 명 지정
    • exports : 패키지 명 지정, 다른 모듈에서 사용할 수 있도록 특정 패키지를 공개 형식으로 만든다.
    • requires : 모듈명 지정, 의존하고 있는 모듈을 지정한다.

댓글남기기