자바 접근제한자
자바에서는 변수 접근을 위해 몇가지 기능을 제공하고 있씁니다.
변수 선언 시 앞 부분에 명시해줌으로 써 지정할 수 있고 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 |