제어자 modifier
제어자
클래스, 멤버변수, 메서드 선언부에 사용하여 부가적인 의미 부여
접근제어자 : public, protected, default, private (조합하여 사용 불가)
그 외 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp(다른 제어자와 조합 가능)
static
사용되는 위치 : 멤버변수, 메서드, 초기화블럭
제어자 | 대상 | 의미 |
static | 멤버변수 | 모든 인스턴스에 공통적으로 사용되는 클래스 변수 (모든 인스턴스에서 공통으로 유지해야 하는 값이 있는 경우 static을 붙이자) 클래스가 메모리에 로드 시 생성됨 -> 클래스변수는 인스턴스 생성하지 않고 사용 가능 |
메서드 | 인스턴스를 생성하지 않고 호출 가능 인스턴스 멤버들을 직접 사용 불가 |
|
초기화블럭 | 클래스가 메모리에 로드 시 단 한번만 수행 주로 클래스변수(static 변수) 초기화에 사용 |
※ 인스턴스 메서드와 static 메서드(클래스메서드)의 차이 : 메서드 내에서 인스턴스 멤버를 사용하는가 (인스턴스 멤버를 사용하지 않는다면 static메서드로 하자)
final 변경 불가
제어자 | 대상 | 의미 |
final | 클래스 | 변경 불가, 확장 불가 -> 상속 불가 |
메서드 | 변경 불가 -> 오버라이딩 불가 | |
멤버변수 | 값 변경 불가한 상수 | |
지역변수 |
※ final 멤버변수 초기화는 보통 선언과 초기화 동시에 하지만, 인스턴스 변수라면 매개변수 생성자를 이용해 초기화할 수도 있다.
abstract 미완성
제어자 | 대상 | 의미 |
abstract | 클래스 | 클래스 내에 추상메서드 선언되어 있음. 미완성 메서드 -> 인스턴스를 생성할 수 없다 |
메서드 | 선언부만 작성, 구현부는 없다 |
※ 드물지만 추상 메서드가 없는 클래스도 abstract를 붙여 추상 클래스로 만들 수 있다.
예 ) WindowAdapter 클래스
public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener
{
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
.....
}
※ 포스팅에 사용한 도서 : 남궁성 자바의 정석 3판