1.제어자란
- 제어자(modifier)는 클래스, 변수 또는 매서드의 선언부에 함꼐 사용되어 부가적인 의미를 부여한다.
1) 접근제어자 :
2) 그 외 :
2.
-
- 인스턴스 변수는 하나의 클래스로 부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수(
- 그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문
-
-
-
- 변수에 사용하면 값을 변경할 수 없는 상수가 되며,
- 메서드에 사용하면 오버라이딩응 할 수 없게 되고
- 클래스에 사용되면 자신을 확장하는 자손 클래스를 정의하지 못한다
-
-
- 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상메서드를 선언하는데 사용한다
-
- 제어자(modifier)는 클래스, 변수 또는 매서드의 선언부에 함꼐 사용되어 부가적인 의미를 부여한다.
1) 접근제어자 :
public
, protected
, default
, private
2) 그 외 :
static
, final
, abstract
, natvie
, transient
, synchronized
, vloatile
, strictfp
2.
static
- 클래스의, 공통적인-
static
은 '클래스의' 또는 '공통적인'의 의미를 가지고 있다.- 인스턴스 변수는 하나의 클래스로 부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수(
static
멤버 변수)는 인스턴스에 관계 없이 같은 값을 갖는다.- 그 이유는 하나의 변수를 모든 인스턴스가 공유하기 때문
-
static
이 붙은 멤버변수와 메서드, 그리고 초기화 블럭은 신스턴스가 아닌 클래스에 관계된것이기 떄문에 인스턴스를 생성하지 않고도 사용할 수 있다-
static
이 사용될 수 있는 곳 : 멤버변수, 메서드, 초기화 블럭
대상 |
의미 |
멤버변수 |
- 모든 인스턴스에 공통저긍로 사용되는 클래스변수가 된다 - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다. - 클래스가 메모리에 로드될 떄 생성된다 |
메서드 |
- 인스턴스를 생성하지 않고도 호출이 가능한 - |
ex)
class StaticTest {
static int width = 200; //클래스 변수
static int height = 120; //클래스 변수
static {
//static 변수의 복잡한 초기화 수행 (초기화 블록)
}
static int max(int a, int b) { //클래스 메서드
return a > b ? a : b;
}
}
3. final
- 마지막의, 변경될 수 없는-
final
은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용 될 수 있다- 변수에 사용하면 값을 변경할 수 없는 상수가 되며,
- 메서드에 사용하면 오버라이딩응 할 수 없게 되고
- 클래스에 사용되면 자신을 확장하는 자손 클래스를 정의하지 못한다
-
final
이 사용될 수 있는 곳 : 클래스, 메서드, 멤버변수, 지역변수대상 | 의미 |
클래스 | 변경될 수 없는 클래스, 확장할 수 없는 클래스가 된다. 그래서 |
메서드 | 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. |
멤버변수 | 변수 앞에 final 이 붙으면, 값을 변경할 수 없는 상수가 된다 |
지역변수 |
ex)
class StaticTest {
static int width = 200; //클래스 변수
static int height = 120; //클래스 변수
static {
//static 변수의 복잡한 초기화 수행 (초기화 블록)
}
static int max(int a, int b) { //클래스 메서드
return a > b ? a : b;
}
}
4. abstract
- 추상의, 미완성의-
abstract
는 '미완성'의 의미를 가지고 있다.- 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상메서드를 선언하는데 사용한다
-
abstract
이 사용될 수 있는 곳 : 클래스, 메서드대상 | 의미 |
클래스 | 클래스 내에 추상메서드가 선언되어 있음을 의미 |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알린다 |
ex)
abstract class AbstractTest { //추상클래스(추상메서드를 포함한 클래스)
abstract void move(); //추상메서드(구현부가 없는 메서드)
}