JAVA public, private, protected 접근자의 차이점

growdeveloper ㅣ 2021. 8. 12. 13:42

자바 접근제한자

자바에서는 변수 접근을 위해 몇가지 기능을 제공하고 있씁니다.

변수 선언 시 앞 부분에 명시해줌으로 써 지정할 수 있고 public, private, protected 로 접근 제한이 가능합니다.

 

▶접근제한 함수 기능

접근제한 함수 기능
public 모든 곳에서 접근 가능
private 자기 자신 클래스에서만 접근 가능
protected 자기 자신 클래스와 상속된 클래스에서 접근 가능

 

왜 이렇게 나뉘어져 있을까?

자바는 캡슐화로써 외부에서 접근할 수 없도록 코드가 구성이 되어 있어야 합니다.

 

▶public

어디에서나 접근이 가능한 접근제한입니다.

사용에는 편리하지만 public 으로 정의된 변수에는 외부코드에서도 접근이 가능하기 때문에 위험합니다.

 

▶private

그렇게 해서 나온 기능이 private 입니다.

private 는 외부에서 클래스 변수에 직접접근할 수 없고 클래스의 메소드를 통해서만 접근이 가능합니다.

그러나 private 는 상속받은 클래스에서도 접근이 불가능한 불편함을 가지고 있습니다.

 

▶protected

외부에서는 변수에 직접 접근이 불가능하지만 상속받은 클래스에서는 접근이 가능합니다. 외부에 노출된 변수는 아니지만 상속받은 클래스에서는 변수를 좀 더 편리하게 사용이 가능합니다.

 

예제 코드

VariableTest 클래스에서 vb 클래스 객체를 생성 후 i2,i3 변수에서는 모두 에러가 발생합니다.

왜냐하면 클래스 외부에서 private 와 protected 변수를 호출했기 때문입니다.

 

eVB 클래스는 Vb 클래스를 상속받았으며 z_idx 변수에서만 에러가 발생합니다.

왜냐하면 protected 는 상속받은 클래스에서는 접근이 가능하기 때문입니다.

 

package Vriable;

public class Vb {
	public int idx;
	protected int f_idx;
	private int z_idx;

}

class eVB extends Vb{
	eVb () {
		super.idx = 0;
		super.f_idx = 0;
		super.z_idx = 0;
	}
}
package main;

import Vriable.Vb;

public class VariableTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Vb vb = new Vb();
		
		vb.idx=0;
		vb.f_idx = 9;
		vb.z_idx = 0;

	}

}

 

'자바' 카테고리의 다른 글

변수(variable)  (0) 2022.05.08
자바의 특징  (0) 2022.05.08
JVM 구조  (0) 2021.04.19
스레드  (0) 2021.04.08
추상 메소드  (0) 2021.04.08