- 서로 관련된 클래스와 인터페이스의 묶음
- 클래스가 물리적으로 클래스파일(.class)인 것처럼, 패키지는 물리적으로 폴더
- 패키지는 서브패키지를 가질 수 있으며, '.'으로 구분
- 클래스의 실제 이름은 패키지명이 포함된 것
- JDK설치 경로는 jre/lib에 위치
- 사용할 클래스가 속한 패키지를 지정하는데 사용
- import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있음
- java.lang패키지의 클래스는 import하지 않아도 사용할 수 있음
- import문은 패키지문과 클래스선언 사이에 선언
- import문은 컴파일 시에 처리되므로 프로그램의 성능에 아무런 영향 미치지 않음
- 두 코드는 서로 의미가 다름
- 이름이 같은 클래스가 속한 두 패키지를 import할 때에는 클래스 앞에 패키지명을 붙여줘야 함
실습을 위해 sub폴더를 생성해 java파일을 하나 만들어준다.
(import를 어떻게 하는지 실습한 거라 안의 내용은 중요시 보지 않아도 됨..나중에 다시 나올 예정..)
package ch07.sub;
public class Sub01 {
// 객체지향에서 데이터는 객체만 볼 수 있는게 기본적이다.
private String data = "데이터";
// 객체의 데이터를 외부에 노출 시키는 것은
// 보통 메소드로 한다
// 원본 데이터를 넘길 수도 있고
// 숨겨야 하는 부분은 숨길 수도 있다
public String getData(){
return "숨긴 " + data;
}
}
패키지 아래에 import해서 Sub01.java안에 있는 클래스를 사용할 수 있다.
(import를 어떻게 하는지 실습한 거라 안의 내용은 중요시 보지 않아도 됨..나중에 다시 나올 예정..)
package ch07;
import ch07.sub.Sub01;
public class S06 {
public static int first = 1;
public int second = 2;
public static final int third = 1;
public void printSecond(){
System.out.println(second);
}
public static void main(String[] args) {
Sub01 sub01 = new Sub01();
System.out.println(sub01.getData());
System.out.println(first); //S06.first와 같다
System.out.println(S06.first);
// System.out.println(second); //가져올 수 없다
// System.out.println(printSecond()); //실행할 수 없다.
// static이 아닌 필드는 인스턴스를 생성해서 가져와야 한다.
// (static 메소드 기준)
S06 s06 = new S06();
System.out.println(s06.second);
s06.printSecond();
S06.first = 11;
// final 값은 바꿀 수 없다
// S06.third = 33;
final String str = "홍길동";
// str = "임꺽정";
}
}