제어자(modifier)
- 클래스, 변수 또는 메서드 선언부에 함께 사용되어 부가적인 의미를 부여한다.
- 접근 제어자: public, protected, default, private
- 접근 제어자는 한 번에 한 가지만 사용할 수 있으며 주로 제일 왼쪽에 위치한다.
- 기타: static, final, abstract, native, transient, synchronized, volatile, strictfp
접근 제어자(access modifier)
- 멤버 또는 클래스에 대한 외부의 접근을 제한하는 역할을 한다.
- 목적
- 클래스 내부에 선언된 데이터의 보호
- 내부적으로만 사용되는 멤버변수나 메서드 등을 클래스 내부에 은닉
- 멤버 변수는 상속이 예상된다면 protected, 아니라면 private으로 선언하고 getter, setter를 통해 접근하도록 정의한다.
- 접근 제어자의 종류
- private: 같은 클래스 내에서만 접근 가능
- default: 같은 패키지 내에서만 접근 가능
- protected: 같은 패키지 또는 다른 패키지의 자손 클래스에서 접근 가능
- public: 접근 제한 없음
public > protected > default > private
static
- 뜻: 클래스의, 공통적인
- static 멤버변수, 메서드, 초기화 블럭은 인스턴스 생성 없이도 사용할 수 있다.
- static 멤버변수
- static 멤버변수는 클래스가 메모리에 로드될 때 생성된다.
- static 멤버변수(클래스 변수)는 모든 인스턴스 사이에 공유되기 때문에 인스턴스와 관계 없이 동일한 값을 지닌다.
- static 메서드
- static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.
- static 초기화 블럭
- static 초기화 블럭은 맨 처음 static을 호출하는 상황에서 자동으로 초기화되며 단 한 번만 호출된다.
class Main {
public static void main(String[] args) {
System.out.println(Circle.PI);
}
}
class Circle {
static float PI;
int r;
static {
PI = 3.14f;
}
}
- 실행 결과
final
- 뜻: 마지막의, 변경될 수 없는
- String과 Math는 대표적인 final 클래스이다.
대상 | 의미 |
---|
클래스 | 변경할 수 없는 클래스, 확장할 수 없는 클래스 → final 클래스는 다른 클래스의 조상이 될 수 없다. |
메서드 | 변경할 수 없는 메서드 → final 메서드는 오버라이딩이 불가하다. |
멤버변수, 지역변수 | final 변수는 값을 변경할 수 없는 상수이다. |
abstract
- 뜻: 추상의, 미완성의
- 추상 클래스: 추상 메서드를 포함한 클래스
- 추상 메서드: 선언부만 작성하고 구현부는 작성하지 않은 메서드
- 추상 클래스는 미완성인 메서드가 존재하는 '미완성 설계도'이므로 인스턴스를 생성할 수 없다.
abstract class AbstractTest {
abstract void move();
}
Source