프로그램을 작성하다 보면 각각의 목적에 따라 여러 개의 클래스 파일 ( 네트워크 처리를 위한 클래스 10개, GUI 처리를 위한 클래스 8개 등)들이 생김
: 이렇게 동일한 목적으로 만들어진 클래스들을 1개의 공간(폴더)에 묶어 관리하기 위해 사용하는 것
# 패키지를 생성하지 않았을 때
// package 구문 미포함
public class Packaage Test1{
}
# 패키지를 생성했을 때
package mypack.test; // package 구문 포함
public class PackaTest2 {
}
import
다른 패키지 내의 클래스를 사용하기 위한 문법 요소
소스 코드 상에서 패키지 구문의 다음 줄에 위치함
다른 패키지의 클래스 사용 방법 2가지
방법 1. 클래스의 풀네임 사용
패키지명.클래스명
방법 2. import 사용
import 패키지명.클래스명
실제로 프로그램을 작성하다 보면 자신이 작성한 클래스보다 자바가 제공하는 클래스를 훨씬 더 많이 사용
public 클래스의 외부에 추가로 정의한 클래스
1개의 소스 파일 안에서 public 클래스를 제외한 모든 클래스를 의미
다른 패키지에서 import 하기 위해서는 public 이 붙어있는 class만 import 가능
자바 제어자 modifier는 클래스, 필드, 메서드, 생성자 등에게 어떠한 특징을 부여하는 문법 요소
public, protected, default (package), private
# 접근 범위
public > protected > default > private
- private : 자신의 클래스 내부에서만 사용 가능한 접근 지정자
- default : 같은 패키지 안의 모든 클래스에서 사용할 수 있는 접근 지정자
- protected
: default보다는 넓은 범위의 접근 지정자이므로 같은 패키지의 모든 클래스에서 사용할 수 있음
* default 범위 + 다른 패키지의 자식 클래스 : 다른 패키지 안에서 사용 가능
- public : 동일 패키지의 모든 클래스에서는 물론, 다른 패키지의 모든 클래스에도 접근 가능
# 클래스의 접근 지정자 : public, default만 사용 가능
클래스에 생성자가 없을 때 컴파일러는 기본 생성자를 자동으로 추가
이 때 자동으로 추가되는 생성자의 접근 지정자는 클래스의 접근 지정자에 따라 결정
클래스 = public : 다른 패키지에서 임포트 할 수 있는 것, 자동으로 추가되는 생성자 = public
생성자 = public : 생성자를 호출해 객체를 생성할 수 있는 것, 자동으로 추가되는 생성자 = default
클래스의 멤버에 사용하는 제어자
인스턴스 멤버 instance member
객체 안에 있을 때 사용할 수 있는 상태가 되는 멤버
멤버 앞에 static이 붙어 있지 않은 것
정적 멤버 static member
앞에 static이 붙어있는 멤버
클래스명.멤버명
// 객체 생성 없이 바로 사용 가능
객체 생성 후, '참조 변수명.인스턴스 필드명'
* 저장 공간이 힙 메모리에 위치하므로 반드시 해당 저장 공간에 값을 읽거나 쓰기 위해서는 참조 변수명 사용해야 함
정적 필드는 객체 간 공유 변수의 성질 존재
인스턴스 메서드와 정적 메서드도 각각의 필드 성질과 동일
정적 필드는 객체의 생성 이전에도 사용할 수 있어야 하므로 생성자가 호출되지 않은 상태에서도 초기화 할 수 있어야 함
but 생성자에서는 정적 필드를 초기화 할 수 없음
: 정적 필드를 초기화 하기 위한 문법을 별도로 제공하는 것
static {
// 클래스가 메모리에 로딩될 때 실행되는 내용
}
// 일반적으로 인스턴스 필드의 초기화는 객체가 만들어지는 시점에서 이뤄짐
객체가 생성자에서 만들어지므로 생성자 내에서 인스턴스 필드를 초기화하는 것이 일반적
but 정적 필드에서는 예외
자바 가상 머신은 프로그램을 실행할 때 실행 클래스명.main() 을 실행하므로 가장 먼저 실행되는 메서드인 main() 메서드를 정적 메서드로 구성한 것
p 302
Doit ! Java_3 에 이어지는 내용으로 세부적인 부분 꼼꼼하게 기억해둘 것