패키지
- 자바에서 패키지는 클래스와 인터페이스의 집합을 의미함
- 서로 관련이 있는 클래스, 인터페이스를 묶음으로써 파일을 효율적으로 관리 가능하고, 이름 충돌 문제를 해결할 수 있음
- 패키지를 사용하기 위해서는 패키지 선언을 해야하며, 그렇지 않으면 이름 없는 패키지로 간주해 하나의 패키지에 포함시킴
package directory1.directory2.MyPackage
- 패키지를 가져오기 위해서는 import문을 사용
import packageName.className
import packageName.*
접근 제어자
- 제어자란 클래스와 클래스 멤버의 선언시 사용해 부가적인 의미를 부여하는 키워드를 의미함
- 접근 제어자는 클래스 외부에서의 직접적인 접근 가능 여부를 설정하게 해주는 제어자를 의미함
- 접근 제어자를 사용해 접근을 거부하는 멤버를 설정해 정보 은닉을 구체화 할 수 있음
private
- private 접근 제어자를 사용한 클래스 멤버는 외부에 공개되지 않으며, 직접 접근할 수 없음
- 해당 멤버에 접근하기 위해서는 해당 객체에 있는 다른 public 메서드를 통해서만 접근할 수 있음
public
- public 접근 제어자를 사용하면 클래스 멤버가 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있게 됨
- public 메서드를 통해서만 객체 내부에 private에 접근할 수 있음 => private 메서드와 프로그램 사이의 인터페이스 역할을 수행한다고 볼 수도 있음
protected

- protected 멤버는 부모 클래스에 대해서는 public처럼 취급되고, 외부에서는 private 멤버로 취급됨
- 멤버를 선언한 클래스의 멤버, 클래스가 속한 패키지의 멤버, 클래스를 상속받은 다른 패키지의 멤버에서 접근이 가능함
default
- 접근제어자를 설정하지 않으면 자동으로 default로 설정됨
- default 멤버는 같은 패키지 내부에서만 접근할 수 있음
기타 제어자
final
- 변경되면 안되는 값이 있을 때 final 제어자를 사용함
- 필드나 지역 변수에 사용하면 값의 변경이 불가능해짐
- 클래스에 사용하면 다른 클래스가 상속받을 수 없음
- 클래스 내부의 메서드에 사용하면 메서드 오버라이딩이 불가능해짐
static
- 일반 변수, 메소드를 클래스 변수, 클래스 메소드로 만들어주는 제어자
- static 제어자를 가지는 멤버는 프로그램 시작시 단 한번만 초기화되며, 인스턴스 생성없이 바로 사용할 수 있게 됨
- static 제어자를 가지는 멤버는 해당 클래스의 모든 인스턴스가 값을 공유함
abstract
- 추상 클래스, 추상 메서드를 구현할 때 사용하는 제어자
- 추상 메서드를 사용시 반드시 클래스에서 abstract 제어자를 붙여야 함
출처
http://www.tcpschool.com/java/java_usingClass_package