클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다.
static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭
인스턴스 멤버를 사용하지 않는 메서드는 static을 붙여서 static메서드로 선언하는 것을 고려하자.
호출 시 편리하고 속도도 더 빠르다.
static초기화 블럭은 클래스가 메로리에 로드될 때 단 한번만 수행되며, 주로 클래스 변수(static 멤버변수)를 초기화하는데 주로 사용된다.
class StaticTest {
static int width = 200; // 클래스 변수(static변수)
static int height = 20; // 클래스 변수(static변수)
static { // 클래스 초기화 블럭
// static 변수의 복잡한 초기화 수행
}
static int max(int a, int b) { // 클래스 메서드(static 메서드)
return a > b ? a : b;
}
}
final이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수
대표적인 final클래스로는 String과 Math가 있다.
class FinalTest { // 조상이 될 수 없는 클래스
final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수(상수)
final void getMaxSize() { // 오버라이딩할 수 없는 메서드(변경불가)
final int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수)
return MAX_SIZE;
}
}
abstract가 사용될 수 있는 곳 - 클래스, 메서드
abstract class AbstractTest { // 추상클래스(추상메서드를 포함한 클래스)
abstract void move(); // 추상메서드(구현부가 없는 메서드)
접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자
접근 범위가 넓은 쪽에서 좁은 쪽의 수 나열하면 하기와 같다.
public > protected > default > private
1. 메서드에 static과 abstract를 함께 사용할 수 없다.
2. 클래스에 abstract와 final을 동시에 사용할 수 없다.
3. abstract메서드의 접근 제어자가 private일 수 없다.
4. 메서드에 private과 final을 같이 사용할 필요는 없다.
[출처] 자바의 정석, 남궁성, 도우출판
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.