- 자바 프로젝트의 디렉토리(폴더) - 패키지로 불리게 됨
- 일정 규모 이상의 프로그램을 적절히 모듈화
- 패키지 정보: 클래스의 구성요소 중 하나
- 클래스명의 중복을 피하기 위해 사용
- 예: Button 클래스 - 내부에서 생성한 클래스도 있지만, java에서 제공해주는 클래스도 있기 때문에 잘 확인해야 한다.
- 빌드의 결과도 패키지의 구조를 따름
- 이전 예제들의 out 폴더 확인할 것
패키지 내 클래스별로 접근제어자 확인하기
private
- 가장 엄격해서 자식 클래스에서도 사용이 안되고 있는 모습
- 접근만 불가능할 뿐이지 Child 내부에서 가지고 있는 것은 맞다.
- 상속받지 않는 클래스도 당연히 사용불가.
- 같은 클래스 내에서만 사용가능.
default
- 같은 패키지 내에서는 사용 가능하므로 자식 클래스 및 Friend 클래스에서도 사용 가능한 걸 볼 수 있따.
protected, public은 훨씬 관대하기 때문에, 다 사용이 가능하다.
다만 protected나 public이라도 인스턴스 생성후 접근 가능.
다른 패키지에 들어있는 클래스로부터도 상속 가능
package sec06.chap02.pkg2;// 상단에 임포트 필요
import sec06.chap02.pkg1.Parent;
public class Child extends Parent {
// Parent와 다른 패키지
// int aa = a; // ⚠️ 불가
// int bb = b; // ⚠️ 불가
int cc = c; // 💡 protected - 다른 패키지, 상속관계
int dd = d;
}
- 다른 패키지이기 때문에, private 사용 불가
- default도 같은 패키지에서만 사용할 수 있기 때문에 사용 불가
- protected는 같은 패키지 아니면 상속일 경우 사용할 수 있어서 c도 사용가능
- public은 어디서든 접근 가능.
와일드 카드와 패키지명 특정
- 특정패키지에 특정 클래스를 지정할 수도 있고, 와일드카드를 찍어서 해당 패키지 안의 클래스를 다 가져올 수도 있다.
- 패키지가 다른 동명 클래스를 가져올 때 구분이 안갈 수 있다. 그때는 클래스를 전부 적어서 가져올 수도 있다.
(ex : chap02.pkg1.....)
- 보통 이렇게 하는건 비효율적이다. 두클래스 이름이 같아서 부득이하게 각각 특정해줘야 하는 경우에만 사용하는 것이 좋다.
컴파일
- java에서 컴파일할 때 그와 관련된, 임포트하는 클래스들도 함께 컴파일 된다.
- 그과정에서 패키지의 정보와 명령을 내리는 위치가 중요하게 맞물려서 작용한다.
프로젝트 패키지명 작명
- 인텔리제이에서 새 프로젝트 - Maven 또는 Gradle - 고급 옵션에서 예시
- 본인/또는 회사의 도메인 (있을 경우) 권장
- kr.yalco.calculator
- 한국에 있는 얄코란 사람/회사가 만든 계산기 프로그램
- 규모, 주체, 용도 등을 파악 가능
- 다른 프로젝트들에 사용될 시…
- kr.yalco.calculator
- java, javax 가 맨 앞에 올 수 없음 (JRE 라이브러리와 중복)
- src 폴더 안에 만들고 클래스 넣어 확인해 볼 것
- 식별자 명명 규칙 따름
- 소문자로 시작하는 것이 컨벤션
java.lang 패키지
package sec06.chap02.pkg5;
public class Main {
public static void main(String[] args) {
// java.lang 패키지에 속한 기본 라이브러리 클래스들
System.out.println("이 클래스들은 왜 임포트를 안 해도 될까요?");
Object object = new Object();
String str = new String("java.lang 패키지 소속이라 그럼");
Integer integer;
Math math;
// 다른 패키지에 속한 기본 라이브러리 클래스들
ArrayList arrayList;
Calendar calendar;
Optional optional;
Iterator iterator;
InputStream inputStream;
Serializable serializable;
Stream stream;
Button button;
}
}
- 자바 라이브러리에 기본으로 포함
- 프로그래밍에 널리 사용되는 핵심적인 클래스들
- 임포트하지 않아도 되는 패키지
- System, String 등을 임포트하지 않아도 되는 이유
- 다른 라이브러리 패키지들은 임포트해야 함
출처
- 사이트, 검색명 (날짜)
'얄코의 제대로 파는 자바 > 섹션6 클래스 더 알아보기' 카테고리의 다른 글
열거형 (0) | 2024.04.17 |
---|---|
메인 메소드 (0) | 2024.04.15 |
익명클래스 (0) | 2024.04.08 |
내부클래스 (0) | 2024.04.07 |
블록과 스코프 (0) | 2024.03.24 |