Java
[JAVA기본]패키지와 모듈
테디규
2022. 12. 5. 21:13
패키지
자바의 패키지는 하나의 디렉토리로 비슷한 성격의 클래스들을 묶어둔 것을 말한다.
상위패키지.하위패키지.클래스
package app.MartService.customer;
// "."로 이동할 수 있다.
그림예시
모듈
자바의 모듈은 외부에서 재사용할 수 있도록 패키지들을 묶은 것을 말한다. (패키지의 상위개념)
일반적으로 이클립스나 인텔리제이에서 개발하는 프로젝트는 모듈이라고 볼 수 있다. 서로 다른 프로젝트(모듈)끼리 import와 export를 이용하여 다른 모듈에 존재하는 패키지를 주고받을 수 있다.
그림 예시
탄생배경
자바 9 이전에는 모든 클래스들을 패키지를 통해서 관리 했다. 그러나 자바가 점점 더 다양한 곳에 사용되고 규모가 커짐에 따라 여러 문제가 발생했다.
1. 패키지의 캡슐화가 완벽하지 않았다.
- 여러 패키지에서 공용으로 사용할 클래스는 패키지가 위치한 디렉토리에 위치할 것이므로, 해당 클래스를 은닉시킬수 없었다.
- 만약 위의 공용으로 사용되는 클래스 내부에 위치시키고 패키지를 숨긴다면, 이 클래스를 따로 꺼내서 사용할 수도 없었다.
2. 빌드 단계에서 프로그램 구동에 필요한 모든 클래스가 다 있는지 확인 할수 없다.
- 내 프로그램을 실행시키는데 필요한 패키지의 클래스들이 잘 로딩되었는지 수작업으로 일일이 확인 할 수 밖에 없다.(동적로딩을 알아야 더 잘 이해할듯 하다..)
3. 런타임이 거대해져 배포하기 어려워졌다.
- 이전에는 rt.jar라는 모든 클래스를 담은 단 하나의 파일에 통합하여 배포했다.
- rt는 런타임(Run Time)이라는 뜻이며 자바 프로그램이 실행되기 위한 모든 클래스가 포함되어 있는 자바 플랫폼 그 자체이다.
- 자바가 성장하면서 이제는 거대한 rt 파일이 만들어지게 되었고, PC에서는 괜찮지만 임베디드 장비에 해당 파일을 설치하기에는 너무 거대하다.
위 같은 이유들로 꼭 필요한 클래스들만 추려 원하는 런타임 파일(모듈로 이루어진)을 만들고 프로그램에 배포하기 위해 모듈화라는 개념이 생겼다.
예시
이전에는 모든 패키지를 담은 파일을 보냈지만, 모듈화 이후로는 기본적인 자바코드를 위해 java.base 모듈, 데이터 다루기 위해 java.sql 모듈 등을 담아 런타임 파일로 제공하여 프로그램을 실행시킬수 있다.
독립적인 모듈단위의 컴포넌트
어떤 기능을 만들기 위해 클래스들을 모아 놓은 것을 패키지라고 말했다.
또한 이러한 패키지들을 모아두어 모듈의 형태로 만들고 외부에서 해당 모듈을 재사용 할 수 있도록 만들었습니다.
다음으로는 OOP의 모듈 만으로는 S/W 재사용성을 만족시킬 수 없어서 탄생한 CBD(Component Base Development) 방법론의 컴포넌트(Component)를 정리해봅시다.