728x90
제어자
- 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
- 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
- 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.
접근 제어자 | public, protected, default, private |
그 외 | static, final, abstract, synchronized, native, transient, volatile, strictfp |
static
static : 클래스의, 공통적인
static이 사용될 수 있는 곳 : 멤버변수, 메서드, 초기화블럭
static | 대상 | 의미 |
멤버변수 | 멤버변수 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. 클래스변수는 인스턴스변수를 생성하지 않고 사용가능 클래스가 메모리에 로드될 때 생성된다. |
|
메서드 | 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. static 메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다. |
final
final : 마지막의, 변경될 수 없는
final이 사용될 수 있는 곳 : 클래스, 메서드, 멤버변수, 지역변수
final | 대상 | 의미 |
클래스 | 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. | |
메서드 | 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. | |
멤버변수 | 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 된다. |
생성자를 통해서 final 멤버변수 초기화
final이 붙은 변수는 상수이므로 보통은 선언과 초기화를 동시에 하지만, 인스턴스변수의 생성자에서 초기화할 수 있다.
abstract
abstract : 추상의, 미완성의
abstract | 대상 | 의미 |
클래스 | 클래스 내에 추상메서드가 선언되어 있다는 것을 의미한다. | |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 메서드를 말한다. |
abstract class Abstract { // 추상클래스
abstract void run(); // 추상메서드
void move() {
System.out.println("달립니다.....");
}
}
접근제어자
멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다.
접근 제어자가 사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자
private | 같은 클래스 내에서만 접근이 가능하다. |
default | 같은 패키지 내에서만 접근이 가능하다. (기본값) |
protected | 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능하다. |
public | 접근 제한이 없다. |
접근 제어자를 이용한 캡슐화
접근 제어자를 사용하는 이유
외부로부터 데이터를 보호하기 위해서
외부에는 불필요, 내부적으로 사용되는 부분을 감추기 위해서
제어자의 조합 | |
대상 | 사용가능한 제어자 |
클래스 | public, (default), final, abstract |
메서드 | 모든 접근 제어자, final, abstract, static |
멤버변수 | 모든 접근 제어자, final, static |
지역변수 | final |
제어자를 조합해서 사용할 때 주의할 점
- 메서드에서 static 과 abstract 를 함께 사용할 수 없다.
- static메서드는 구현부(몸통)에 있는 메서드만 사용할 수 있기 때문이다.
- 클래스에 abstract과 final을 동시에 사용할 수 없다.
- 클래스에 final을 사용한다는 것은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성해야한다.
- abstract메서드의 접근제어자가 private이 될 수 없다.
- abstract메서드는 자손클래스에서 구현을 해주어야하는데, 접근제어자가 private이면 자손클래스에서 접근을 할 수 없기 때문이다.
- 메서드에 private과 final을 같이 사용할 수 없다.
- 접근제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하기 때문이다.
'Language > Java' 카테고리의 다른 글
[Java] 정리 (다형성, 추상...) (0) | 2022.08.19 |
---|---|
[Java] 클래스(Class), 객체(Object), 인스턴스(Instanse)의 개념 (0) | 2022.08.19 |
[Java] 실습 (event) Click (0) | 2022.08.18 |
[Java] 실습 (event) (0) | 2022.08.18 |
[Java] 실습 (event) (0) | 2022.08.18 |