클래스와 인터페이스의 집합
자바의 모든 클래스는 반드시 하나 이상의 패키지에 포함되어야 한다
하지만 자바 컴파일러는 소스 파일에 어떠한 패키지의 선언도 포함되지 않으면, 기본적으로 이름 없는 패키지(unnamed package)에 포함해 컴파일한다
import문을 활용하여 다른 패키지의 class를 사용할 수 있다
import java.awt.*;
import java.util.*;
import문을 선언할 때 *는 패키지의 모든 클래스를 import 하는 것이지 모든 하위 패키지의 클래스까지 포함해주는 것은 아니다
따라서 위 2개의 import 문을 아래의 1개의 import 문으로 표현할 순 없다
import java.*
클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미
- 접근제어자
- 기타제어자
프로그램에서 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다 (정보은닉)
정보 은닉을 위해서 접근제어자를 사용할 수 있다
1. private
2. public
3. default
4. protected
private
외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없도록 하는 접근 제어자
따라서 자바 프로그램은 private 멤버에 직접 접근할 수 없으며, 해당 객체의 public 메소드를 통해서만 접근할 수 있습니다.
public
해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있도록 함
자바 프로그램은 public 메소드를 통해서만 해당 객체의 private 멤버에 접근할 수 있다
자바 클래스는 private 멤버로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축합니다.
default
같은 클래스와 같은 패키지에 속하는 클래스에서만 접근할 수 있다
default 접근 제어자가 따로 존재하는 것은 아니고, 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 가지게 된다
protected
해당 클래스 내부와 자식 클래스, 같은 패키지 내에서 접근할 수 있도록 함
따라서 접근제어자의 허용 범위는 public > protected > default > private 순서이다
자바에서 final 제어자는 '변경할 수 없다'는 의미로 사용된다
final은 클래스, 메소드, 필드, 지역 변수에 사용할 수 있다
자바에서 static 제어자는 '공통적인'이라는 의미로 사용된다
static은 메소드, 필드, 초기화 블록에 사용할 수 있다
- 프로그램 시작시 최초에 단 한 번만 생성되고 초기화된다
- 인스턴스를 생성하지 않고도 바로 사용할 수 있게 된다
- 해당 클래스의 모든 인스턴스가 공유한다
자바에서 abstract 제어자는 '추상적인'이라는 의미로 사용된다.
abstract는 클래스, 메소드에 사용할 수 있다
선언부만 있고 구현부가 없는 메소드를 추상 메소드라 하며, abstract 메소드가 있으면, 클래스도 반드시 abstract 제어자를 붙여야 한다
abstract 제어자를 가지는 클래스는 다른 클래스가 상속해서 오버라이딩해야만 사용할 수 있다