패키지 이름은 보통 도메인 이름을 거꾸로 적은 후에 프로젝트 이름 등을 붙여서 만들게 된다. 그리고 패키지 구조는 소프트웨어 아키텍처에 따라 달라진다. 즉, 구체적인 아키텍처를 가지고 있는 프로그램을 만들때, 패키지에 대해 이해할 수 있게 되는 것이다.
패키지 연습하기
com.example.util이란 패키지에 Calculator 클래스를 작성한다고 하자. 그러면 com.example은 도메인 이름을 거꾸로 적은 것이고, util은 프로젝트나 모듈의 이름이 된다.
그렇다면 패키지 이름을 작성할 때 왜 도메인 이름을 거꾸로 적는것일까? 우리는 오픈 소스를 사용하는데, 다른 사람이 만든 클래스 중에 내가 만든 클래스와 이름이 같은 경우가 있다. 하지만 같은 폴더에는 같은 이름의 파일이 여러 개가 있을 수 없다. 즉, 패키지 이름이 같고, 클래스 이름까지 같으면 충돌이 발생한다. 그렇다면 충돌이 발생하지 않도록 하려면 어떻게 할까?
이에 대한 방법으로 생각해 나온 것이 거꾸로 적은 도메인 + 프로젝트 이름(모듈 이름)이고, 이 형태로 하면 충돌이 잘 안나겠구나라고 생각한 것이다.
패키지 내 파일 컴파일 및 실행과정
작성된 .java 파일을 컴파일 하기 위해서, javac -d 경로명 파일이름.java 명령을 실행하면 컴파일된다. 그리고 실행할 클래스가 패키지를 가지고 있기때문에 패키지명을 붙여서 실행한다.
java com.example.util.Calculator
위와 같이 입력하면 현재 경로가 CLASSPATH에 잡혀있기 때문에 java가 실행하는 경로에서 com 폴더를 찾는다. 즉, JVM은 CLASSPATH에서 com 폴더를 찾고, 그 com 폴더 아래에서 example 폴더를 찾고, example 폴더 아래에서 util 폴더를 찾은 후, util 폴더 아래에서 Calculator 클래스를 찾아서 실행하게 된다.
import
import는 JVM에게 어떤 패키지의 Calculator를 사용하게 할 것인지 알려주는 역할을 한다. 즉, 동일한 이름의 클래스가 여러 패키지에 있을 수 있기때문에 잘 구분해서 import하여 사용해야 한다.
또한 이름이 같은 클래스를 모두 import하고 사용하려고 하면, 클래스 이름만 가지고는 어떤 package의 클래스를 사용할지 알 수가 없게된다. 따라서 같은 이름의 클래스를 사용할 때는 하나는 import를 해서 사용하고, 또 다른 하나는 클래스명 앞에 패키지명까지 붙여서 사용해야 한다.
com.example.util2.Calculator cal2 = new co,m.example.util2.Calculator();
cal2.divide(100, 50);
인용
https://youtu.be/jdkY_x3RKv0?si=AxC1zFE6BlXRyXns
'Language > Java' 카테고리의 다른 글
super() 생성자와 불변 객체 (0) | 2023.09.14 |
---|---|
상속 (0) | 2023.09.14 |
좋은 객체? 나쁜 객체? (0) | 2023.09.13 |
자바 버전별 메모리 영역과 인스턴스 생성 (0) | 2023.09.13 |
클래스 메서드에서 인스턴스를 필드를 사용하지 못하는 이유 (0) | 2023.09.13 |