2013년 11월 1일 금요일

자바 패키지란(Java Package) 관련 있는 클래스 또는 인터페이스들을 묶어서 패키지라고...

자바 패키지란(Java Package)
 
관련 있는 클래스 또는 인터페이스들을 묶어서 패키지라고 하고 윈도우 폴더처럼 같은 패키지의 클래스는 같은 폴더에 있다.
 
자바프로그램이 패키지로 정의되어 있다면 그 프로그램은 반드시 패키지로 정한 폴더 내부에 있어야 한다.

 클래스를 패키지 이름과 함께 계층적인 형태로 사용함 으로서 다른 그룹에 속한 클래스와 발생 할 수 있는 이름 충돌 방지한다. (서로 다른 패키지라도 같은 이름의 클래스 존재 가능, java.util.Date, java.sql.Date)

name space 부여(닷넷에서는 네임스페이스라고 하죠 )

자바에서 사용되는 API들은 대부분 package화 되어 제공되며 개발자는 이 패키지내의 클래스들을 import하여 이용할 수 있다.

클래스의 이름은 기본적으로 Package이름.클래스이름 이다.
 
패키지내의 클래스와 인터페이스를 사용하기 위해서는 패키지이름을 명시하거나 import 문장을 이용하여 package 이름을 생략하여 클래스, 인터페이스 이름만 사용할 수 있다.

특정 클래스만 import 하는 경우 : import java.util.Date;
패키지 내의 모든 클래스를 import하는 경우 : import java.util.*;
 
import 하는 경우 부 패키지는 import 되지 않는다.(해당 폴더의 클래스만 임포트되고 하위 폴더의 클래스는 임포트 안됨)
 (java.awt, java.awt.event)
 
패키지 이름이 생략된 클래스, 인터페이스 이름을 컴파일러가 import 문장을 참조하여 패키지이름이 포함된 인터페이스나 클래스 이름으로 변환한다.
 
컴파일시 자바 컴파일러는 소스코드의 첫문장으로 import java.lang;이 자동 삽입된다.(그래서 System 클래스를 별도 임포트없이 사용했다.)

주로 domain 이름을 거꾸로 하여 사용하는 것이 관례다.

[예제]
 
import java.util.Date;
import java.util.Random;
// import java.util.*;  // 위의 두 import문 대신 사용할 수 있지만 해당 패키지의 모든 클래스가 로드되므로 비추
// import java.lang.*;  // 자바 컴파일러에 의해 자동 삽입된다.
class ImplicitPack {
    public static void main(String[] args) {

 //컴파일하면 자동으로 클래스이름압ㅍ에 패키지명을 삽입한다.
        //java.lang.System.out.println(new java.util.Date());
        System.out.println(new Date());
        System.out.println(new Random().nextInt());
    }
}

댓글 없음:

댓글 쓰기