본문 바로가기

개발/java

[java] 제어자 static / final / abstract / 접근제어자

반응형

자바의 정석

스터디 노트

static

인스턴스변수는 하나의 클래스로에서 각기 다른 값을 유지 

클래스변수는 인스턴스에 관계없이 같은 값을 갖는다(하나의 변수를 모든 인스턴스가 공유하기 때문)

static이 붙은 멤버변수, 메서드, 초기화 블럭은 인스턴스를 생성하지 않고도 사용할 수 있다. 

인스턴스메서드와 static 메서드의 근본적인 차이는 메서드 내에서 인스턴스 멤버를 사용하는가의 여부에 있다.


static 멤버변수 

1. 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.

2. 클래스변수는 인스턴스를 생성하지 않고도 사용 가능 하다.

3. 클래스가 메모리에 로드될 때 생성된다.


static 메서드 

1. 인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 된다.

2. static메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.


static 초기화 블럭

1. 클래스가 메모리에 로드될 때 한번만 수행 

2. 주로 클래스변수를 초기화 하는데 사용 



final

1. 변수에 사용되면 값을 변경할 수 없는 상수

2. 메서드에 사용되면 오버라이딩 할 수 없다.

3. 클래스에 사용되면 자신을 확장하는 자손 클래스를 정의하지 못하게 된다. (조상이 될 수 없다)



abstract 

메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용한다.

클래스에 사용되면 클래스 내에 추상 메서드가 선언되어 있음을 의미한다.

미완성 이기 때문에 인스턴스 생성할 수 없다. 



접근제어자

public> protected > default > private

private : 같은 클래스 내에서만 접근 가능

protected : 같은 패키지 + 다른 패키지의 자손 클래스에서 접근 

default : 같은 패키지 내에서만 접근 가능

public 접근 제한 없다.
사용이유 : 
1. 클래스의 내부에 선언된 데이터를 보호하기 위해서
2. 임시 사용되는 멤버변수, 부분작업 처리를 감추기 위해서


* 주의사항 
1. 메서드에 static , abstract 함께 사용할 수 없다.
2. 클래스에 abstract , final 동시에 사용할 수 없다.
클래스에 사용되는 final은 클래스를 확장 할 수 없다는 의미고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순된다.
3. abstract메서드의 접근 제어자가 private일 수 없다.
abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다.
4. 메서드에 private final 같이 사용할 수 없다.
private인 메서드는 오버라이딩 될 수 없기 때문이다.



반응형

'개발 > java' 카테고리의 다른 글

[java] 오버라이딩 / 오버로딩 / super  (0) 2018.10.07
[java]객체지향프로그래밍1  (0) 2018.10.07
[java] 자리수 맞추기, printf  (1) 2018.10.07