자바9 모듈

반응형
반응형
모듈(module)은 역사적으로 프로그래밍이라는 관점에서는 기본적으로 본체에 대한 독립된 하위 단위라는 필연적인 개념의 큰 틀을 따르고 있지만 본체와 모듈 간에 가지고 있었던 문제들을 해결해 나가는 과정에서 발전하였다. 모듈에 가장 큰 영향을 미쳤던 클래스 그리고 라이브러리가 향상됨에 따라 점차 발전하였다. 이러한 지속 가능성은 이것의 가장 큰 장점 중 하나이다. 초기에는 분리된 독립성의 모듈로 도입되었으나 점차로 객체화, 캡슐화, 모듈화 프로그래밍 기법 등 여러 기능들이 추가되면서 점차적으로 영역이 나뉘어가고 있다. 그러나 이로 인하여 모듈성을 제대로 반영하지 못하고 있다는 비난을 받을 수도 있다. 한편 이러한 비난은 모듈 시스템, 모듈 프로그래밍이 갖는 현재의 한계를 인식하고 보다 안정적으로 발전하기 위해 효율적인 방향을 추구하는데 기여할 수 있다.
여기서 본체는 하드웨어적인 운영체계일 수도 있고 규모 있는 소프트웨어 프로그램의 본체일 수도 있다.
위키백과

위키백과에 따르면, 모듈은 큰 틀에서 독립된 하위단위라고 한다.
그렇다는 이야기는 모듈은 모듈은 조각조각으로 나뉘어 질 수 있다는 것을 뜻한다.

[자바9 모듈화]라는 책에 따르면, 대규모 애플리케이션을 개발하는 기술들은 저평가 되고 있고, Java에 국한된 문제는 아니라고 한다.
결국 시스템이 너무 커져 개인 역량만으로 해결할 수 없는 경우도 발생한다고 한다.

모듈화는 이러한 복잡도를 관리하기 위한 기술 중에 하나라고 한다.

자바9의 모듈화는 자바8의 스트림과 람다에 비해 화려하지 않는다고 한다.
왜냐하면 근본적인 차이가 있는데, 모듈화같은 경우 전반적인 구조와 관련이 있고, 스트림과 람다는 코드내에서 발생하는 부분적인 변경이라고 한다. 애플리케이션을 모듈화를 하면 디자인, 컴파일, 패키징,배포등 외부적인 요인에 영향을 준다.

어쩌면 모듈화는 단순히 추가된 기능이라고 정의할수 없다고 한다.

그렇다면 모듈화는 무엇일까?

모듈화란?

모듈화는 시스템을 상호 연결된 모듈로 분해하는 것을 의미한다.
즉, 어떠한 두 물체가 서로 영향을 주는 행위를  모듈화라고 부르는것 같다.

우리 주위에 서로 영향을 주는 것들이 있는지 조사해봤다.

01234

사진들을 살펴보면 하나같이 독립된 무언가로 분리할 수 있다는 특징을 가지고 있다.
하지만 분리된 부품?들은 합쳐진 상태의 결과물과는 다른 성격을 지닌다는 것을 알 수 있다.

모듈화를 만들때는 3가지 사항을 지켜야 된다고 한다.

강력한 캡슐화

캡슐화란 무엇일까?
캡슐화는 실제 구현 내용 일부를 외부에 감추어 은닉한다는것을 뜻한다.

public class Just {
  private String a;
  private int b;
}

그런데 강력한 캡슐화라는 건 무엇일까?
여기서 생각해야 될것이 은닉한다는 것인데,
다른 모듈로 부터 내부 코드를 숨길 수 있는 것을 뜻한다.

이렇게 하면 공개 코드와 내부동작 코드를 나눌 수 있다.
이렇게 하는 이유는 예상치 못한 충돌을 방지하기 위함이다.
이렇게 캡슐화된 모듈은 다른 모듈에 영향을 주지 않고, 자유롭게 수정이 가능하다.

즉, 독립적으로 모듈을 만들어되는 것을 의미하는 것 같다.

잘 정의된 인터페이스

 - 많은 모듈들이 엮여서 동작하는 경우, 모든 코드를 캡슐화를 할 수 없다.
 - 캡슐화를 할 모듈과 하지 않는 모듈들을 구분해서 관리할 필요가 있다.

public interface Inter {

}

명시적 의존성

 - 모듈에서 특정 기능 구현을 위해 다른 모듈을 사용할때가 종종있다.

즉, 강력한 캡슐화를 통해 캡슐화된 모듈을 만들고, 캡슐화가 된 모듈과 캡슐화가 되지 않는 모듈을 구분짓기 위해 인터페이스를 잘 정의할 필요가 있으며, 어떠한 모듈은 다른 모듈의 기능을 위해 존재할지도 모르기 때문에 명시적으로 의존성을 알려줄 필요가 있는 것 같다.

모듈화를 이용하면 복잡한 구조의 아키텍처에서 가지고 있는 문제들을 높은 확률로 방지 할 수 있다.

모듈형 JDK

- 런타임시 필요하지 않는 클래스를 제거하기가 어려웠다. 왜냐하면 기존 JDK에서는 하위 호환성을 지켜야 하기 때문이다.
- 리소스낭비가 발생하게 된다.
- 공격자가 불안전한 내부 클래스로 접근을 한다면 보안적으로 문제가 발생한다.
- 만약, 런타임시 필요하지 않는 클래스를 제거만 할 수 있다면, 편의성이 증가하지 않을까?

이러한 이유때문에 자바9부터 JDK 모듈이 도입이 되었다고한다.

 

 

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

LocalDateTime (미 정재 .ver)  (0) 2021.09.04
람다  (0) 2021.03.01
제네릭  (0) 2021.02.21
멀티쓰레드 프로그래밍  (0) 2021.02.13
I/O  (0) 2021.02.11

댓글

Designed by JB FACTORY