제어자(modifier)는 클래스, 변수, 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제자자와 그 외의 일반 제어자로 나눌 수 있다.
제어자(modifier)
static(클래스의, 공통적인)
static이 붙은 멤버변수와 메서드, 초기화 블럭은 인스턴스를 생성하지 않고도 사용할 수 있다.
선언
클래스명.클래스변수/메서드명()
static을 사용하지 않은 메서드와 변수는 오류가 뜬다
static을 써준 변수와 메서드는 인스턴스화를 하지 않아도 사용할 수 있다.
abstract(추상의, 미완성의)
메서드의 선언부만 작성하고 실제 수행 내용은 구현하지 않는 추상메서드를 선언하는데 사용한다.
abstract는 클래스와 메서드를 대상으로 사용한다.
- 클래스 : 클래스내에 추상메서드가 선언되어 있음을 의미한다.
- 메서드 : 선언부만 작성하고 구현은 작성하지 않은 추상메서드임을 알린다.
abstract class AbTest { abstract void Test(); }
접근 제어자(Access modifier)
멤버변수, 클래스, 메서드, 생성자에 사용할 수 있으며, 외부에서 접근 가능 여부를 컨트롤 하는 역할을 한다. 접근 제어자가 없는 경우 자동으로 default값이 된다.
접근 제어자 | 동일 클래스 | 동일 패키지 | 자식 클래스 | 전체 |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
default(기본) | O | O | X | X |
private | O | X | X | X |
AccessMod.java와 AccessModTest.java는 각각 다른 패키지에 있다.
AccessModTest.java 자바의 helloDEF변수는 default인데도 자손 클래스에 에러가 나오지 않는 것을 볼 수있다. 그 이유는 현재 동일한 패키지에 있기 때문에 그런 것이다.
AccessMod.java의 AccessMod클래스의 Hello변수들은 public을 제외하곤 전부 에러가 나온 것을 볼 수 있다.
AccessModTest의 자손 클래스인 AAccessMod의 helloPRO는 에러가 나오지 않은 것을 볼 수있다.
제어자의 조합
패키지란 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다.
클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다.
선언
원래 다른 패키지의 클래스를 사용하려면, 사용하고자 하는 클래스의 패키지 명까지 전부 포함시켜 선언해야 한다. 하지만, 클래스의 패키지를 import에 명시해주면, 클래스 선언시 패키지명을 생략할 수 있다.
실행시간엔 영향을 미치지 않고, 컴파일 시간에 조금 미침
선언
정적 임포트(static import)
선언