자바 공부 기록 2회독(6) - 2024.1.22

동준·2024년 1월 22일
0

개인공부(자바)

목록 보기
8/16

주의! 해당 글은 아직 미완이며, 뇌피셜과 오류가 가득해서 부정확한 정보들이 있을 수 있음
개인적인 공부 기록에 불과한 해당 글을 바탕으로 진행한 프로젝트의 오류에 대해서는 책임이 없음을 밝힘

5. 라이브러리, 모듈

2) 인텔리제이에서의 모듈

사실 어제랑 오늘 내내 인텔리제이를 들여다보면서 모듈 추가에 대해 알아봤다.
이것이 자바다는 커리큘럼 진행을 이클립스로 진행하기 때문에 전혀 다른(?) IDE인 인텔리제이에서의 모듈 적용 및 기타 기능에 대한 이해는 별개의 문제였기 때문...

아무쪼록 1회독 때는 실패(?)했던 인텔리제이에서의 모듈 적용 및 import를 성공은 했으나 느낌상 반쪽짜리 성공인 것 같다. 우선은 모듈의 필요성에 대한 체득부터 필요할 것 같다.

(1) 모듈이란?

사전적 정의는 규격화된 조립 부품. 이거 완전 레고

자바 프로젝트에서의 모듈을 논하기 전에 패키지부터 먼저 이해가 필요하다.
사실 패키지는 어렵지 않다. 자바의 모든 클래스 파일을 담는 폴더를 패키지라고 일컫기에.

그럼에도 패키지가 중요한 의의를 가지는 것은, 자바 문법 중 접근 제한자 때문일 것이다.
뭐... 접근 제한자가 뭐 있는지는 이미 다 아니까 여기서는 언급 안 하고...

만약 외부의 특정 프로젝트를 내가 지금 제작하는 프로젝트에 필요한 기능을 추출해서 사용하고 싶다면 그것은 앞전에 봤던 라이브러리를 활용하면 될 것이다.

나는 여기서 의존성이 강하게 결합되는 것을 생각했다.
즉, 라이브러리로 추가된 프로젝트는 현재 진행 중인 프로젝트에 강하게 종속되면서 라이브러리의 특정 기능만을 사용하게 된다면 그것은 개발 단계에 있어서 의존성은 강하게 잡혔음에도 특정 기능만이 종속적으로 수행되고 기타 나머지 기능들은 따로 놀게 되는 문제가 생길 것이라고 생각했다.(내 뇌피셜임, 추후 수정 가능)

Java 9부터 추가된 module은 어떻게 보면 라이브러리의 일종이라고 볼 수 있다. 하지만 일반적인 라이브러리와의 차이점이라면,

  • 보통의 라이브러리 : 내부에 포함된 모든 패키지에 외부 프로그램에서의 접근이 가능해진다
  • 모듈 : 특정 패키지를 은닉함으로써 접근을 제한하고 의존 관계를 명확하게 한다

...로 구별할 수 있겠다.

(2) 인텔리제이에서의 모듈


루트 프로젝트를 하나 생성한다.

File -> Project Structure -> Modules -> + -> New Module
모듈 명칭을 작성하고 위치를 확인한 후 적용한다.
(나는 하나의 모듈을 추가로 더 작성했다)


현재 루트 프로젝트와 모듈의 위치 관계는 이러하다.
이제 다음 단계로 모듈 디스크립터(module-info.java)를 작성해야 된다.

모듈 디스크립터는 모듈 시스템의 활성화를 명시하고, exports하는 패키지를 직접적으로 지정하며, 해당 패키지를 필요로 하는 프로젝트에서는 requires 문법을 통해 필요로 하는 모듈을 특정할 수 있다.

// module_b의 모듈 디스크립터 예시
module module_b {
    exports pack3;
    // ...
}

// root_project의 모듈 디스크립터
module root_project {
    requires module_b;
    // ...
}

모듈 디스크립터까지 작성이 완료된 디렉토리 구조는 이러하다.

(3) 모듈 의존성 설정

모듈을 requires하는 디스크립터를 확인하면 컴파일 에러가 뜬다.
그 이유는 루트 프로젝트 모듈이 모듈 a와 모듈 b의 경로를 모르기 때문에 의존성을 추가해줘야 한다(이것 또한 내 뇌피셜, 추후 수정 가능)

File -> Project Structure -> Modules ->
requires를 하는 프로젝트 모듈 -> + -> Module Dependency...

경로로 의존성을 추가하거나, 인텔리제이에서 제공하는 quick-Fix 기능을 사용해서 자동으로 추가할 수 있다.


(4) 진행 잠정 중단

사실 모듈에 대한 이론적인 부분과 별개로 인텔리제이에서의 적용은 너무 어렵다
아직 의존성 추가에 대한 에러부터 해서, 모듈 디스크립터 에러, 메인 클래스 컴파일 에러까지 계속 연이은 에러의 향연이라서... 완벽하게 적용이 덜 됐다.

이클립스로 옮겨탈까 고민했다니까

아직 모듈에 대한 필요성이 체감이 안 되기에...
우선은 다음 과정을 진행하면서 프로젝트를 할 때 모듈의 필요성을 체득하고 직접 적용하는 연습을 해봐야겠다.

우선은 여기서 스톱! 다음 단계 진행해야지...

profile
scientia est potentia / 벨로그 이사 예정...

0개의 댓글