자바 개발을 하면 패키지를 참 많이 만든다. 자바에서 패키지는 그냥 폴더가 아니다. 패키지는 클래스를 분류해서 이름이 중복되지 않게 하고, 클래스의 역할을 규정해 혼동을 막는다.
패키지를 만들때 몇가지 주의사항이 있다.
- 패키지 이름은 java로 시작하면 안된다.
- 패키지 이름은 소문자로 지정해야 한다.
- 패키지 이름은 자바의 예약어를 사용하면 안된다.
주의사항을 기억하면서, 일단 패키지를 한번 만들어보자. javastudy폴더 아래 com 폴더를 만들고, 그 아래 molt 폴더를 만들겠다.
javastudy > com > molt 폴더 아래 PackageTest.java 파일을 아래와 같이 만들자.
package com.molt;
public class PackageTest {
public void printPackage(){
System.out.println("This is molt package!");
}
}
그리고 javastudy폴더 아래 Main.java 파일을 아래와 같이 만든다.
import com.molt.PackageTest;
public class Main {
public static void main(String[] args) {
PackageTest packageTest = new PackageTest();
packageTest.printPackage();
}
}
Main.java 파일을 컴파일하고, 실행하면 결과가 출력된다.
// 결과
This is molt package!
PackageTest.java 파일을 보면 맨윗줄에 package com.molt; 항목을 볼 수 있다. 이게 패키지 선언문이다.
패키지를 선언할때 주의할 점은 아래와 같다.
- 패키지 선언은 소스의 자바코드중 가장 윗줄에 있어야 한다.
- 패키지 선언은 소스하나(파일)에 하나만 있어야 한다.
- 패키지 선언은 패키지 이름과 위치한 폴더 이름이 같아야 한다.
Main.java파일에는 왜 package 선언문이 없을까?
자바는 해당 패키지의 가장 상위 디렉토리(root)에서 컴파일하고, 실행한다는 약속이 있다. Main.java 파일의 위치는 javastudy폴더 바로 아래인데, 여기가 루트에 해당한다. 따라서 package 문장이 없는 파일은 루트 디렉토리에 위치한 파일이라고 생각하면 되지 않을까 추측한다.
import
이번에는 Main.java파일에 못보던게 생겼는데?
import com.molt.packageTest;
자바에서 import 하지 않고 쓸수 있는 것.
- 같은 패키지
- java.lang 패키지(String클래스, System클래스)
import하지 않고 쓸수 있는 위의 두가지 패키지 외에 클래스를 쓰기 위해 사용하는 것이 바로 import라는 예약어이다. Main.java는 루트에 위치해있고, PackageTest.java 파일은 com/molt 패키지 아래 있기 때문에 이 클래스를 사용하기 위해서 import 하는것이다.
import [패키지이름].[클래스이름]을 명시하면 해당 패키지에 있는 클래스를 사용하겠다는 것을 컴파일러에게 알려주는 것이다. 그러면 컴파일러가 import 대상이 되는 클래스도 함께 컴파일 해준다. Main.java 파일 하나만 컴파일 해도 import하고있는 PackageTest.java 파일도 함께 컴파일 해준다.
자바에서는 패키지가 같은지 다른지에 따라 import 여부가 결정된다. 폴더 구조가 상위인지 하위인지에 따른 상관관계는 전혀 없다. 단지 논리적으로 어떤 패키지 하위에 있는지 여부를 따지기 위한 것일 뿐. 같은 패키지에 있는지, 다른 패키지에 있는지만 중요하다.
import static
JDK5 부터 추가된 기능. static 변수(클래스 변수)와 static 메소드를 사용하고자 할때 편하게 사용할수 있다. 만약 static 메소드나 변수가 중복될때는 현재 자기가 위치한 클래스에 있는 static 메소드나 변수가 우선이다.
'Java' 카테고리의 다른 글
[자바의 신] 상속 (0) | 2020.10.06 |
---|---|
[자바의 신] 접근제어자 (0) | 2020.10.02 |
[자바의 신] 참조 자료형 - 메소드 (0) | 2020.09.27 |
[자바의 신] 참조 자료형 - 생성자 (0) | 2020.09.21 |
[자바의 신] 변수 하나에 여러 개의 데이터를 담을 수 없을까? (0) | 2020.09.15 |