패키지
프로젝트를 개발하다 보면 수많은 클래스를 작성하게 될 때가 많다.
몇백 개 혹은 몇천 개가 될 수도 있는 클래스들을 관리하지 않으면 유지 보수가 어렵게 된다.
그래서 이런 많은 클래스를 관리하기 위해 패키지를 사용한다.
클래스는 이름이 동일하더라고 패키지가 다르면 다른 클래스로 인식한다.
클래스의 전체 이름은 '패키지 이름+클래스 이름'으로 클래스명만 입력하는 것은 정확한 방법이 아니다.
따라서 만약 같은 클래스명이라도 다른 패키지에 들어 있으면 다른 클래스로 사용된다.
ex)
1. com/example/ClassA와 cam/example/ClassB인 같은 경로에 있는 클래스 2개가 있다고 가정해보자.
ClassA 클래스명은 com.example.ClassA 이다.
ClassB 클래스명은 com.example.ClassB이다.
2. com/example/ClassA와 com/another/ClassA인 다른 경로에 있지만 같은 클래스명을 가지고 있는 파일이 2개 있다고 가정해보자.
첫 번째 클래스명은 com.example.ClassA이다.
두 번째 클래스명은 com.another.ClassA이다.
즉 언뜻 보면 같아 보일 수 있어 에러가 날 것 같지만 명확하게 다른 이름을 가지고 있는 다른 클래스 파일이다.
패키지를 선언할 때는 규칙과 주의해야 할 사항이 있다.
- 숫자로 시작해서는 안 되고 _,$를 제외한 특수 문자를 사용해서는 안된다.
- java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안 된다.
- 단어 바뀌는 것 상관없이 모두 소문자로 작성하는 것이 관례이다.
JDK 8 이전 버전에서는 패키지가 없는 클래스를 선언할 시 default 패키지에 포함시킨다.
JDK 11 이후 버전부터는 패키지가 없는 클래스를 생성하면 컴파일 에러가 난다.
import문
사용하고자 하는 클래스들이 다른 패키지에 소속되어 있다면, import문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 수 있다.
//import 상위패키지.하위패키지.클래스이름;
import com.example.ClassA;
import com.example.*;
만약 사용하고자 하는 클래스들이 동일한 패키지 소속이라면 개별 import문을 작성하는 것보다는 *을 이용해서 해당 패키지에 소속된 클래스들을 사용할 것임을 알려주는 것도 좋은 방법이다.
import문을 사용할 때 주의할 점은
- 상위 패키지를 import 했다고 하위 패키지까지 import 되는 것은 아니다.
자바는 패키지 전체 이름으로 패키지를 식별한다
따라서 com.example과 com.example.ClassA는 서로 다른 패키지로 인식한다
따라서 이 두 패키지에 소속된 클래스를 사용하려면 각각의 패키지를 import해와야 한다. - 서로 다른 동일한 클래스 이름이 존재하고, 두 패키지가 모두 improt 되었다면 컴파일 에러가 발생한다.
이 경우에는 정확하게 패키지가 포함된 클래스 전체 이름을 기술해야 한다.
package chap6.hankook;
public class Engine {
}
package chap6.hyundai;
public class Engine {
}
package chap6.mycompany;
import chap6.hyundai.Engine;
import chap6.hankook.*;
public class Car {
chap6.hankook.Engine engine1 = new chap6.hankook.Engine();
chap6.hyundai.Engine engine2 = new chap6.hyundai.Engine();
}
Engine 클래스는 import 된 두 패키지에 모두 있기 때문에 패키지 이름과 함께 전체 이름이 기술되어야 한다.
접근 제한자
접근 제한자는 말 그대로 접근을 제한하기 위해 사용된다.
접근 제한자의 종류로는 public, protected, private 세 가지가 있다.
- public 접근 제한자: 외부 클래스가 자유롭게 사용할 수 있다.
public 제한자를 가지면, 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한 없이 사용할 수 있다. - protected 접근 제한다: 같은 패키지 또는 자식 클래스에서 사용할 수 있다.
- private 접근 제한자: 외부에서 사용될 수 없게 합니다.
위 세 가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가진다.
- default 접근 제한: 같은 패키지에 소속된 클래스에서만 사용할 수 있다.
default 접근 제한을 가지면 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없도록 제한된다.
'📖혼자공부하는자바' 카테고리의 다른 글
Chapter10-2 예외 처리 (1) | 2022.12.20 |
---|---|
Chapter 07-3 추상 클래스, 추상 메소드 (0) | 2022.12.10 |
Chapter 06-4-2 메소드 호출 (0) | 2022.11.29 |
Chapter 05-2 배열 (0) | 2022.11.26 |
Chapter 06-1 객체 (0) | 2022.11.22 |