제어자(modifier)는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여하며 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다.
- 접근 제어자 public, protected, (default), private
- 그 외 제어자 static, final, abstract, native, transient, synchronized, volatile, strictfp
제어자는 클래스나 멤버 변수와 메서드에 주로 사용되며 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능한데 접근 제어자는 한 번에 하나만 선택해서 사용할 수 있다.
static
static은 클래스의 또는 공통적인의 의미를 가지고있으며 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만 static 변수는 인스턴스에 관계없이 같은 값을 갖는다.
제어자 | 대상 | 의미 |
static | 멤버변수 | • 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. • 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다. • 클래스가 메모리에 로드될 때 생성된다. |
메서드 | • 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. • static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다. |
public class StaticExample {
public static void main(String[] args) {
System.out.println(StaticExam.max(1,2));
}
}
class StaticExam {
static int width = 200; // 멤버 변수
static int height = 100;
static {
// 초기화 블럭
}
static int max(int a, int b) { // 메서드
return Math.max(a, b);
}
}
final
final은 마지막의 또는 변경될 수 없는의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다.
제어자 | 대상 | 의미 |
final | 클래스 | • 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. • 다른 클래스의 조상이 될 수 없다. |
메서드 | • 변경될 수 없는 메서드 • 오버라이딩을 통해 재정의 될 수 없다. |
|
멤버변수 | • 값을 변경할 수 없는 상수가 된다. | |
지역변수 |
public class FinalExample extends FinalExam { // Cannot inherit from final
public static void main(String[] args) {
System.out.println(FinalExam.WIDTH); // 200
}
}
final class FinalExam { // 클래스
static int WIDTH = 200; // 멤버 변수
final int getMaxSize() { // 메서드
WIDTH = 100;
final int WD = WIDTH; // 지역 변수
return WIDTH;
}
}
abstract
abstract는 미완성의 의미를 가지고 있다.
메서드의 선언부만 작성하고 실제 수행 내용은 구현하지 않은 추상 메서드를 선언하는데 사용된다.
제어자 | 대상 | 의미 |
abstract | 클래스 | • 클래스 내에 추상 메서드가 선언되어 있음을 의미한다. |
메서드 | • 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다. |
추상 클래스는 아직 완성되지 않은 메서드가 존재하는 미완성 설계도이므로 인스턴스를 생성할 수 없다.
[참조] - 남궁 성, JAVA의 정석, 도우출판, 2019
'Java의 정석' 카테고리의 다른 글
다형성(polymorphism) (0) | 2022.04.07 |
---|---|
접근 제어자(access modifier) (0) | 2022.04.06 |
import (0) | 2022.04.04 |
패키지(Package) (0) | 2022.04.01 |
참조변수 super (0) | 2022.03.31 |