접근 지정자
개요
- java 접근 지정자 private, default, protected, public 에 대해서 알아보려고 한다.
private, default, protected, public 비교
- public : 어떠한 클래스든 접근이 가능하다.
- protected : 상속받은 클래스 또는 같은 패키지에서만 접근이 가능하다.
- default : 자신 클래스 내부와 같은 패키지 내에서만 접근이 가능하다.
- private : 같은 클래스 내에서만 접근이 가능하다.
- 접근영역 : public > protected > default > private
코드 예시
public
package com.pack;
class A {
public int data = 40;
}
package com.pack.test;
class B {
public static void main(String args[]) {
A obj = new A();
System.out.println(obj.data);
}
}
- 위 코드의 경우 에러가 발생하지 않는다.
- 접근 지정자가 public 인 경우, 패키지도 다르고, 외부 클래스이고, 상속관계도 아니지만 접근이 가능하다.
protected
package com.pack;
class A {
protected int data = 40;
}
package com.pack.test;
class B extends A{
public static void main(String args[]) {
A obj = new A();
System.out.println(obj.data);
}
}
- 위 코드의 경우 에러가 발생하지 않는다.
- 클래스 B 는 A와 패키기도 다르고, 외부 클래스이다.
- 접근 지정자가 protected 인 경우, 하위 클래스에서 접근이 가능하기 때문이다.
- 물론 상속관계가 아니더라도 패키지가 같으면 접근 가능하다.
default
package com.pack;
class A {
int data = 40;
}
package com.pack.test;
class B {
public static void main(String args[]) {
A obj = new A();
System.out.println(obj.data);
}
}
- 위 코드의 경우 에러가 발생한다.
- 접근 지정자가 default 의 경우, 다른 패키지에서는 접근이 불가능하다.
- 당연하겠지만 클래스 B 의 패키지가 클래스 A 와 같이 com.pack 이라면, 접근이 가능하다.
private
package com.pack;
class A {
private int data = 40;
}
package com.pack;
class B {
public static void main(String args[]) {
A obj = new A();
System.out.println(obj.data);
}
}
- 위 코드의 경우 에러가 발생한다.
- 그 이유는 접근지정자가 private 이면, 다른 클래스에서 접근이 불가능하다.
- 접근하려면, getter, setter 를 사용해야한다. -> 안전장치 역할을 한다. -> 이는 캡슐화를 돕는다.
접근 지정자 의 장점
- 접근제어자를 이용하면 프로그래머의 코딩 실수를 방지할 수 있고 기타 위험요소를 제거할 수 있는 등의 장점이 있다.