0%

Java제어자

제어자(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(); //에러. 추상 클래스의 인스턴스 생성불가
  • 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체 생성가능