👨💻 package 키워드
- 패키지란 폴더 또는 디렉터리를 의미한다.
- 자바에서 패키지란 관련된 인터페이스나 클래스를 적절히 배치할 수 있도록 만든 폴더 또는 디렉터리
- API에서 제공되는 많은 클래스들이 패키지화되어 제공되고 있다.
- 자바 소스 파일에서 이 파일의 클래스나 클래스들이 속하는 패키지는 package와 함께 지정된다. 이 키워드는 일반적으로 소스 파일에서 처음 오는 키워드이다. 하나의 패키지 선언을 소스 파일에 선언할 때에는 다음과 같이 할 수 있다.
package java.awt.event;
패키지 안에는 같은 이름의 클래스를 사용할 수 없으며 패키지가 다르면 상관없다. 패키지명은 관례에 따라 소문자로 작성한다. 그 외에도 몇 가지 규칙이 존재한다.
- 숫자로 시작할 수 없다.
- _ $ 문자를 제외한 특수문자는 사용할 수 없다.
- 자바 예약어를 이름으로 사용할 수 없다. ex) public, int
오라클 네이밍 컨벤션 : https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
패키지가 없다면?
폴더나 디렉터리가 없는 바탕화면을 떠올려보자. 같은 이름의 파일로 생성이 불가능하며 원하는 파일을 찾는데도 한참 걸릴 것이다. 자바에서도 마찬가지다. 패키지라는 개념이 없다면 라이브러리를 두 개만 사용해도 충돌이 날 것이다. IDE의 자동완성 기능으로 평소에 패키지라는 개념을 신경 쓰지 않았을 수도 있지만 패키지가 없다면 무시무시한 혼란을 초래한다.
FQCN (Fully-Qualified Class Name)
모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다.
이 둘을 합쳐야 완전하게 한 클래스를 표현할 수 있으며 FQCN(Fully Qualified Class Name)이라 한다.
String 클래스의 패키지는 "java.lang"이며 java.lang은 자바에서 자동으로 import 되기 때문에 풀 네임을 선언할 필요는 없지만 FQCN은 "java.lang.String"이 된다.
빌트-인 패키지(Built-in Package)
자바가 기본적으로 제공하는 패키지다.
java.lang 패키지의 클래스는 Import를 하지 않아도 사용이 가능하다.
👨💻 import 키워드
- 사용할 클래스가 속한 패키지를 지정하는 데 사용.
- 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다.
- 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아낸 다음, 모든 클래스 이름 앞에 패키지명을 붙여 준다.
- import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다. java.util.List 풀네임으로 List를 선언할 수 있지만 import를 사용하여 패키지명을 생략
import java.util.ArrayList;
import java.util.List;
public static void main(String[] args) {
// java.util.List list = new ArrayList();
List list = new ArrayList();
}
static import
static import를 사용하면 특정 클래스의 static 멤버를 간결하게 호출하여 사용할 수 있다.
import static 패키지명.클래스명;
import static 패키지명.*;
👨💻 접근 지시자
접근 지시자는 멤버 변수나 메서드들의 접근 범위를 정의하기 위해 사용한다.
- public : 접근을 제한하지 않아 어디서든 접근이 가능하다.
- protected : 클래스 내부, 동일 패키지, 상속받은 클래스에서만 접근을 허용한다.
- default(명시하지 않음) : 클래스 내부와 동일 패키지에서만 접근이 가능하다.
- private : 클래스 내부에서만 접근을 허용한다.
접근 지정자 | 접근 범위 | 동일 클래스 | 동일 패키지 | 다른 패키지의 자식 클래스 | 다른 패키지 |
public | 접근 제한 업음 | O | O | O | O |
protected | 동일 패키지와 상속 받은 클래스 내부 | O | O | O | |
default | 동일 패지키 내에서만 | O | O | ||
private | 동일 클래스 내에서만 | O |
'개발 > Java' 카테고리의 다른 글
[Java] 제네릭 (2) | 2022.03.02 |
---|---|
[JUnit] @ParameterizedTest - @MethodSource 사용하기 (0) | 2022.02.27 |
[JUnit] Parameterized Test - 테스트를 효율적으로 (1) | 2022.02.11 |
[Java] 리플렉션 (reflection) 개념 이해하기 (0) | 2022.01.29 |
[Java] Record (0) | 2022.01.20 |