라이브러리란? 프로그램 개발 시 활용할 수 있는 클래스와 인터페이스들을 모아놓은 것이다.
*.jar
파일 형태로 존재하며 클래스와 인터페이스의 바이트코드 파일이 압축되어 있다.
인텔리제이에서 jar 추출 하는 법
대충 이렇게 추출할 코드를 만들고
File -> Project Settings -> Artifacts
저기 + 표시 눌러주고 From module with depencies 눌러서 만들고 Apply
그 후 Build -> Build Artifacts
그럼 저 경로에 jar파일이 생긴다.
File -> Project Settings -> Libraries
그리고 + 표시 눌러서 추가하면 됨
모듈이란 패키지 관리 기능이 포함된 라이브러리를 말한다.
일반 라이브러리는 내부에 포함된 모든 패키지에 외부 프로그램에서의 접근이 가능하지만
모듈은 패키지를 은닉하여 접근할 수 없게끔 할 수 있다.
또한 모듈 기술자(module-info.java)를 통해 모듈간의 의존 관계를 쉽게 파악할 수 있다.
응용프로그램의 규모가 커질수록 협업과 유지보수 측면에서 서브 모듈로 쪼개서 개발하는 것이 유리하다.
exports <패키지 명>
exports 키워드는 해당 모듈이 가지고 있는 패키지를 외부에서 사용할 수 있도록 열어주는 역할을 한다.
requires <모듈 명>
requires 는 모듈을 이식받는 모듈이나 프로젝트에서 필요한 의존 모듈을 설정하는 키워드이다.
즉, 어떤 모듈을 컴파일 하거나 실행 할 때 반드시 먼저 필요한 의존 모듈을 설정하는 것이다.
그런데 여기서 의존 모듈을 의존 모듈로 쓰고 싶을 때가 있다.
즉, MyApplication
-> module_a
-> module_b
이런 구조로 의존성을 가지고 싶을 때가 있는데, MyApplication에서 requires로 module_a를 의존 설정 해도 module_a는 module_b를 의존 모듈로 설정하고 있으면 MyApplication에서는 module_b를 모르기 때문에 설정을 할 수가 없다. 그 때 사용하는 키워드가 전의 의존 (requires transtivie) 이다.
requires transitive module_b
module_a에서 이렇게 쓰면 의존을 받는 MyApplication에서도 module_b를 쓸 수 있다.
module-info.java
module my.module.a {
exports pack1;
requires transitive my.module.b;
}
즉, module_a의 모듈기술자를 이렇게 작성하면 MyApplication에서 module_a를 requires로 받았을 때 정상적으로 module_b 까지 사용할 수 있는 것이다.
File -> Project Settings -> Modules
여기서 추가하면 된다.
2번 소스파일이 아니라 .class 파일로 존재합니다.
3번 없으면 모듈로 취급 못받습니다.
3번 할 수 있습니다. 내가 의존을 설정하고 또 다른 모듈에게 전의 할 수 있죠.
4번 집합 모듈을 의존 설정해도 별개로 다른 모듈의 의존 설정을 할 수 있습니다.
2번 아무리 기본 모듈이라도 쓸려면 import 해야 합니다.