Hyunebee
제어자 본문
제어자
제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여해준다.
접근제어자 - public, protected, default, private
그 외 - static final, native, transient, synchronized, volatile, strictfp
static
static은 인스턴스와 상관없이 항상 일정한 값을 가진다. 하나의 변수를 모든 인스턴스가 공유하기 때문이다.
static은 멤버변수, 메소드, 초기화 블럭에서 사용한다.
| 멤버변수 | 모든 인스턴스에서 사용되는 공통된 변수 인스턴스를 생성하지 않고 사용할 수 있다. - 클래스가 메모리에서 로딩될때 같이 생성 |
| 메서드 | 인스턴스를 생성하지 않고 사용할 수 있다. static 메소드 안에서는 인스턴스 멤버들을 사용할 수 없다. - 생각해보면 인스턴스가 생성되기 전에 먼저 생성되기 때문이다. |
final
final은 클래스, 메서드, 멤버변수, 지역변수에서 사용한다.
| 클래스 | 클래스에 사용하면 확장하는 자손 클래스를 정의할 수 없게 만든다. |
| 메서드 | 메서드에 사용되면 오버라이딩을 할 수 없게 만든다. |
| 멤버변수 | 값을 변경할 수 없는 상수처럼 사용하게 된다. but 인스턴스 변수에 final을 사용한 경우는 생성자를 통해 초기화 할 수 있다. |
| 지역변수 |
abstract
abstract는 클래스, 메서드
| 클래스 | 클래스 내에 추상 메서드가 선언되었음을 의미한다. |
| 메서드 | 메서드의 선언부만 작성하고 구현부는 작성하지 않음을 의미한다. |
접근제어자
| 제어자 | 같은 클래스 | 같은 패키지 | 자손클래스 | 전체 |
| public | o | o | o | o |
| protect | o | o | o | x |
| default | o | o | x | x |
| private | o | x | x | x |
우리가 접근 제어자를 사용하는 이유는
-외부로부터 데이터를 보호하기 위해 사용
-외부에는 불필요한 내부적으로만 사용되는 부분을 감추기 위해서 이다. - 캡슐화
생성자의 접근제어자
생성자의 접근 제어자를 private로 지정하게 되면 해당 클래스에서만 생성자에 접근 할 수 있게 된다. 이렇게 만들고 static을 활용해 인스턴스의 반환을 public으로 해준다면 다른 클래스에서 객체를 만들어서 사용하더라고 하나의 인스턴스만을 사용할 수 있게 보장하게 된다. 이것을 sigleton객체라고 한다.
제어자들 간의 조합
1. static 메서드와 abstract를 함께 사용할 수 없다
static 메서드는 구현부가 존재해야하지만 abstract는 선언부만 있고 구현부는 없기때문이다.
2. abstract와 final을 동시에 사용할 수 없다.
abstract는 상속을 통해서 메소드를 완성시키지만 final은 메서드의 오버라이딩을 금지하기 때문에 같이 사용할 수 없다.
3.abstract와 private 동시에 사용할 수 없다.
2번과 같이 상속을 통한 오버라이딩을 하지만 private를 사용하면 같은 클래스에서만 접근할 수 있음으로
같이 사용할 수 없다.
'Java > Java의 정석' 카테고리의 다른 글
| abstract, interface (0) | 2022.03.06 |
|---|---|
| 다형성 (0) | 2022.03.05 |
| 오버라이딩 (0) | 2022.03.03 |
| 클래스간 관계 결정 - 상속과 포함 (0) | 2022.03.03 |
| 변수의 초기화 (0) | 2022.03.02 |