default (Package-Private): 키워드가 아니며, 접근 제어자를 아무것도 명시하지 않았을 때 적용되는 기본 접근 수준
같은 패키지 내에서만 접근이 가능
관련있는 클래스 파일(컴파일 된 .class)을 저장하는 디렉터리
클래스나 일부 멤버를 공개하여 다른 클래스에서 접근하도록 허용
객체 지향 언어의 캡슐화(Encapsulation) 를 지원하여 멤버(변수, 함수)를 보호하고 정보를 은닉(Information Hiding)하는 것이 핵심 목적
외부에 꼭 필요한 부분만 최소한으로 노출
먼저 모든 멤버를 private으로 선언하고, 필요에 따라 점진적으로 default, protected, public 순으로 공개 범위를 넓히는 것을 권장
멤버 변수를 private으로 지정하고 public 접근 메소드(Getter/Setter)를 제공함으로써, 변수에 잘못된 값이 저장되는 것을 막을 수 있다.

다른 클래스에서 사용하도록 허용할 지 지정
| 멤버에 접근하는 클래스 | private | 디폴트 접근 지정 | protected | public |
|---|---|---|---|---|
| 같은 패키지의 클래스 | x | o | o | o |
| 다른 패키지의 클래스 | x | x | x | o |
| 접근가능영역 | 클래스 내 | 동일패키지 내 | 동일패키지와 자식클래스 | 모든클래스 |
최상위 클래스(Top-level Class)는 public 또는 default만 가능
public 클래스는 소스 파일의 이름과 반드시 일치해야 하며, 하나의 소스 파일에 하나만 존재 가능
default(아무것도 안 쓴 경우) 클래스는 같은 패키지 내에서만 객체 생성 및 사용이 가능
private, protected는 최상위 클래스에 사용할 수 없다.
내부 클래스(Inner Class) 는 멤버로 취급되므로 4가지 접근 제어자를 모두 사용할 수 있다.
공간적 특성: 멤버들은 객체(인스턴스)마다 독립적으로 별도 존재
인스턴스 멤버 (Instance Member):
new 키워드를 통해 객체가 생성된 후에만 사용할 수 있다. 메모리(Heap 영역)에 객체가 실제 생성되어야 그 안의 인스턴스 멤버도 생성된다.
멤버들은 다른 객체에 의해 공유되지 않고 배타적
class Sample{
static int m;
static void f(){...}
}
객체마다 생기는 것이 아님.
클래스 당 하나만 생성
객체를 생성하지 않고 사용 가능
클래스당 하나만: static 멤버는 객체에 소속된 정보가 아니라, 클래스 자체에 소속된 정보
클래스가 로딩될 때 공간 할당: JVM(자바 가상 머신)이 프로그램을 실행하기 위해 클래스 정보를 읽어들일 때, 메모리의 Method Area(또는 Static Area)에 단 한 번 공간이 할당되고 프로그램이 끝날 때까지 유지
동일한 클래스의 모든 객체에 의해 공유. 한 객체에서 static 변수의 값을 변경하면 다른 모든 객체에서도 변경된 값을 보게 된다.
전역변수나 전역함수는 static으로 클래스에 작성
static필드나 메소드는 하나만 생성. 클래스의 객체들 공유
static 메소드는 non-static 멤버에 접근 불가능
이유: static 메소드는 클래스가 메모리에 로딩될 때 바로 사용 가능하지만, non-static 멤버는 객체가 생성되어야만 존재하기 때문. 객체가 하나도 없는 시점에도 static 메소드는 호출될 수 있으므로, 존재하지 않을 수도 있는 non-static 멤버에는 접근할 수 없다.
static 메소드는 this 사용 불가
이유: this는 "메소드를 호출한 객체 자신"을 가리키는 참조변수. static 메소드는 특정 객체에 소속되어 호출되는 것이 아니라 클래스 이름으로 직접 호출되므로, 가리킬 "객체 자신"이 존재하지 않는다.
상수 필드는 선언 시 또는 생성자에서 초기값을 지정
한 번 값이 할당되면 실행 중 값 변경이 불가능
자식 클래스가 부모 클래스의 핵심적인 메소드 동작을 임의로 변경하는 것을 막고 싶을 때 사용.
String 클래스가 대표적인 예로, 다른 클래스가 String을 상속받아 핵심 기능을 변경하는 것을 원천적으로 차단하기 위해 final로 선언
중간 고사 파이팅