Hyunebee

제어자 본문

Java/Java의 정석

제어자

Hyunebee 2022. 3. 3. 17:56

제어자

제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여해준다.

 

접근제어자 - 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