자바 접근제한자
자바에서는 변수 접근제한을 위해 몇가지 기능을 제공하고 있습니다.
변수 선언 시 앞 부분에 명시해줌으로 써 지정할 수 있고 public, private, protected 로 접근제한이 가능합니다.
접근제한 함수 기능
접근제한 함수 | 기능 |
public | 모든 곳에서 접근 가능 |
private | 자기 자신 클래스에서만 접근 가능 |
protected | 자기 자신 클래스와 상속된 클래스에서 접근 가능 |
왜 이렇게 나뉘어져 있을까?
자바는 캡슐화로써 외부에서 접근할 수 없도록 코드가 구성이 되어 있어야 합니다.
public
어디에서나 접근이 가능한 접근제한입니다.
사용에는 편리하지만 public 으로 정의된 변수에는 외부코드에서도 접근이 가능하기 때문에 위험합니다.
private
그렇게 해서 나온 기능이 private 입니다.
private 는 외부에서 클래스변수에 직접접근할 수 없고 클래스의 메소드를 통해서만 접근이 가능합니다.
그러나 private 는 상속받은 클래스에서도 접근이 불가능한 불편함을 가지고 있습니다.
protected
외부에서는 변수에 직접접근이 불가능하지만 상속받은 클래스에서는 접근이 가능합니다.
외부에 노출된 변수는 아니지만 상속받은 클래스에서는 변수를 좀 더 편리하게 사용이 가능합니다.
예제 코드
VariableTest 클래스에서 vb 클래스 객체를 생성 후 i2, i3 변수에서는 모두 에러가 발생합니다.
왜냐하면 클래스 외부에서 private 와 protected 변수를 호출했기 때문입니다.
eVb 클래스는 Vb 클래스를 상속받았으며 i3 변수에서만 에러가 발생합니다.
왜냐하면 protected 는 상속받은 클래스에서는 접근이 가능하기 때문입니다.
에러가 나는 부분을 캡쳐하여 같이 공유하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package Chapter11;
import Chapter11_1.Vb;
public class VariableTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Vb vb = new Vb();
vb.i1=0;
vb.i2=0;
vb.i3=0;
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package Chapter11_1;
public class Vb {
public int i1;
protected int i2;
private int i3;
}
class eVb extends Vb {
eVb () {
super.i1 = 0;
super.i2 = 0;
super.i3 = 0;
}
}
|
cs |
자바 public, private, protected 접근자의 차이점
자바 public, private, protected 차이점
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] 오버로딩(overloading)과 오버라이딩(overriding) 차이점 (0) | 2020.12.13 |
---|---|
[JAVA] 자바 오버라이딩이란? (0) | 2020.12.13 |
[JAVA] this() 와 super() 의 차이점 (0) | 2020.12.13 |
[JAVA] 슈퍼클래스의 생성자 오버로딩을 서브클래스에서 호출하는 방법 (0) | 2020.12.13 |
[JAVA] 슈퍼클래스와 서브클래스의 상속 알아보기 (0) | 2020.12.13 |