제어자(modifier)
- 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여
- 접근 제어자:
public
,protected
,defalut
(아무것도 붙이지 않은 것),private
- 제어자: static, final, abstract, native, transient, synchronized, volatile, strictfp
- 하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만)
1 | public class ModifierTest { |
2 | public static final int WHIDTH = 200; |
3 | |
4 | public static void main(String[] args){ |
5 | System.out.println("WIDTH="+WHIDTH); |
6 | } |
7 | } |
static - 클래스의, 공통적인
- 멤버변수
- 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨
- 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능
- 클래스가 메모리에 로드될 떄 생성
- 메서드
- 인스턴스를 생성하지 않고도 호출이 가능한 stiatic메서드가 됨
- static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없음
1 | // 객체 생성없이 사용 가능 |
2 | class StaticTest { |
3 | static int width = 200; //클래스변수 |
4 | static int height = 120; //클래스변수 |
5 | |
6 | static { //클래스초기화블록 |
7 | //static변수의 복잡한 초기화 수행 |
8 | } |
9 | |
10 | static int max(int a, int b) { //클래스메서드 |
11 | // iv, instance 메서드 사용불가 이유: 객체를 생성 후 사용가능하기 때문 |
12 | return a > b ? a: b; |
13 | } |
14 | } |
final - 마지막의, 변경될 수 없음
- 클래스
- 변경될 수 없는 클래스, 확장될 수 없는 클래스
- 메서드
- 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의할 수 없음
- 멤버변수, 지역변수
- 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 됨
1 | final class FinalTest { // 조상이 될 수 없는 클래스 |
2 | final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수(상수) |
3 | |
4 | final void getMaxSize() { // 오버라이딩할 수 없는 메서드(변경불가) |
5 | final int MS = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수) |
6 | return MAX_SIZE; |
7 | } |
8 | } |
abstract - 추상의, 미완성의
- 클래스
- 클래스내에 추상 메서드가 선언되어 있음을 의미
- 메서드
- 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림
1 | abscract class AbstractTest { // 추상클래스(추상 메서드를 포함한 클래스) |
2 | abstract void move(); // 추상메서드(구현부가 없는 메서드) |
3 | } |
4 | |
5 | AbstractTest a = new AbstractTest(); //에러. 추상 클래스의 인스턴스 생성불가 |
- 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체 생성가능