Java

6. 클래스 정리3 : 패키지와 imoprt

문정훈 2022. 1. 20. 23:26

1. 패키지 정리

패키지에는 .java 파일을 만들 수 있다.
.java 파일에는 여러 개의 클래스를 선언 할 수 있는데 public 클래스는 .java파일 명으로 단 하나 만들 수 있다. (관례적으로 한 파일당 한 클래스이다.)


실행클래스는 꼭 public클래스에서 선언되어야 한다.


패캐지에는 여러 개의 .java파일이 존재 하는데 각 파일에는 public 클래스가 하나씩 존재한다 즉 파일 개수만 큼 존재한다. 같은 패키지에서는 클래스들을 서로 공유 할 수 있다. 한 클래스에서 다른 클래스를 사용하려면 클래스 변수를 선언해 객체를 생성하여 클래스, 클래스 내부의 함수를 사용할 수 있다. 이때는 public 키워드가 무시됨 그냥 class *{} 이렇게 선언된 클래스도 객체 생성 후 마음껏 사용할 수 있기 때문이다. 

다른 패키지에 각각 클래스가 존재하는 상황: 한 패키지의 .java파일의 클래스에서 다른 패키지의 선언된 클래스를 사용할 시 import선언을 통해 패키지를 선언해 주어야 한다. 
방법1) import 상위패키지.하위패키지.클래스;
방법2) import 상위패키지.하위패키지.*;
public선언된 클래스만 사용할 수 있다. 아무 선언도 안되잇는 클래스나 메소드는 default처리 되어 패키지 사이에서는 공유가 안되기 때문이다.

따라서 다른 패키지에 있는 클래스를 사용하는 것은 import로 패키지를 선언 한 후 다른 패키지의 public 클래스만 사용할 수 있다. 
다른 패키지에 있는 매소드를 사용하는 것은 import로 매소드가 선언된 클래스의 패키지를 선언한 후 public 클래스 내에 public 매소드만 사용할 수 있다. Public 이 선언되지 않은 클래스에서 public 매소드는 사용 못한다 애초에 다른 패키지에서 defalut클래스는 접근하지 못하기 때문에 클래스 자체를 접근 못하기 때문이다. 

 

 

2. import

- 같은 패키지에 속한다면 public, default는 자유롭게 import없이 사용가능하다.
- 다른 패키지에 속한다면 public의 경우 import해주면 사용 가능하나 default는 안된다.
같은 패키지라는게 상 하위 관계도 안됨 걍 완전 같은 하나에 패키지에 있는 클래스들만 import없이 사용하는것임.


<신경 쓸거>
다른 패키지에서 동일 이름의 클래스 A가 있는 경우 문제점 


문제점 1) import하지 않고 한 클래스에서 A를 선언시 패키지1에서 가져올지 패키지2에서 가져올지 오류가 생긴다.
문제점 2) 두 패키지 모두 import한 경우에 A를 선언시 어떤 패키지에서 가져올지 몰라 컴파일 에러가 난다,.


해결 방법) 이런 경우는 그냥 import하지 않고 사용할 클래스의 풀네임을 그냥 작성해 생성자를 작성 한다.