패키지
- 클래스 + 인터페이스의 집합을 의미
- 모든 클래스는 반드시 하나 이상의 패키지에 포함되어야 한다.
import 문의 선언
- import 패키지이름.클래스이름;
- import 패키지이름*;

접근 제어자
- 객체 지향에서 정보 은닉이란 사용자가 굳이 알 필요가 없는 사용자로부터 숨겨야 한다는 개념이다. 이런 정보 은닉을 위해 접근 제어자라는 기능을 제공하고 있다.
접근 제어자 종류
- private
- public
- default
- protected
- 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능하다.
- 부모 클래스에서는 public, 외부에서는 private로 취급
접근 제어자의 접근 범위

접근 제어자를 사용하는 이유
- 클래스의 내부에 선언된 데이터를 보호하기 위해서이다.
데이터가 유효한 값을 유지하도록 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서 외부로부터 접근을 제한하는 것이 필요하다.
- 이것을 데이터 감추기 하고하며 객체 지향 개념에선 캡슐화라고 한다.
그 외 기타 제어자가 있다.
final 제어자
- 변경할 수 없다는 의미
- 필드나 지역 변수에 사용하면 값을 변경할 수 없는 상수가 된다.
- 클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없다.
- 메소드에 사용하면 오버라이딩을 할 수 없다.
final 사용할 수 있는 대상 : 클래스, 메소드, 필드, 지역변수
// 클래스 사용
public final class MyClass{
...
}
// 메소드 사용
public final void myMothod(){
...
}
// 필드 선언
private final String name;
static 제어자
- 공통적인 이라는 의미로 사용
- 변수에 사용하면 해당 변수를 클래스 변수로 만들어준다.
- 메소드에 사용하면 해당 메소드를 클래스 메소드로 만들어준다.
static 제어자를 가지는 멤버 특징
- 프로그램 시작 시 최초에 단 한 번만 생성되고 초기화된다.
- 인스턴스를 생성하지 않고도 바로 사용할 수 있게 된다.
- 해당 클래스이 모든 인스턴스가 공유한다.
static 사용할 수 있는 대상 : 메소드, 필드, 초기화 블록

abstract 제어자
- 추상적인 의미로 사용
- 선언부만 있고 구현부가 없는 메소드를 추상 메소드라고 하며 반드시 abstract 제어자를 붙여야 한다.
- 하나 이상의 추상 메소드가 포함하고 있는 추상 클래스도 반드시 abstract 제어자를 붙여야 한다.
abstract 사용할 수 있는 대상 : 클래스, 메소드

제어자의 조합
