2016-03-18

9. java - package

package 
 - 클래스 파일이 저장되어 있는 디렉토리 정보를 표시해서 인스턴스 생성하기 위해 사용
 - 소스 파일에 별도의 선언이 필요 + 디렉토리도 잘 나누어야 함


* 패키지 선언
    package 패키지 명;

ex) 다른 디렉토리에 있지만 이름이 동일한 클래스가 있는경우 













이 경우 각각의 Circle 인스턴스를 생성하려면 먼저 소스파일에 패키지 선언을 하고 생성을 해야한다.


(AAA의 Circle.java)

//소스파일의 위에 패키지 선언을 한다.
//해당 클래스는 pack.AAA 라는 패키지에 묶인다.
package pack.AAA; 
class Circle
{
    int r;
    public Circle(int rad)
    {
        r = rad;
    }
}



(BBB의 Circle.java)
//해당 클래스는 pack.BBB 라는 패키지에 묶인다.
package pack.BBB; 
class Circle
{
    int r;
    public Circle(int rad)
    {
        r = rad;
    }
}



//각 Circle 인스턴스 생성시
pack.AAA.Circle c1 = new pack.AAA.Circle(10);
pack.BBB.Circle c2 = new pack.BBB.Circle(20);


패키지 이름은 pack.AAA와 pack.BBB이고 이것을 찾기 위해 C: 가 클래스패스에 포함되어 있어야 한다. 

* 클래스 이름, 패키지 이름은 클래스 패스를 기준으로 찾는다.
* 클래스는 반드시 하나의 패키지에 포함 되어야 하는데 별도의 선언이 없는 경우 이름없는 패키지로 묶인다  
    --- why? 클래스의 접근허용 범위 때문에 


- import 

 패키지에 포함되어 있는 인스턴스 생성시 불편... 
 import를 사용하여 미리 소스 파일의 앞에 선언해준다.
import pack.AAA.Circle;
Circle c1 = new Circle(10);


더 간단히 인스턴스를 생성할 수 있게 됨. 


단, 클래스의 이름이 겹치는 경우는 모호함이 발생할 수 있기 때문에 잘 보고 사용한다.

import pack.AAA.Circle;
import pack.BBB.Circle; 
//각 인스턴스가 어느 패키지의 인스턴스인지 구분할 수 없음
Circle c1 = new Circle(10);
Circle c2 = new Circle(20);


 -- 이런경우는 X



댓글 없음 :

댓글 쓰기