- 접근지정자(Access Modifier)
접근 지정자 |
오직 클래스 |
같은 패키지 |
자식 클래스 |
외부 어디서나 |
public |
O |
O |
O |
O |
protected |
O |
O |
O |
|
default |
O |
O |
|
|
private |
O |
|
|
|
대상 | 사용 가능한 접근 제어자 |
클래스 | public, default |
메서드 | public, protected, default, private |
멤버변수 | public, protected, default, private |
지역변수 | 없음 |
긁로 말하면 다음과 같습니다
- public: 어디서든 접근 가능
- protected: 동일한 패키지 내에 존재하거나 자식 클래스에서 접근 가능
- default: 동일한 패키지 에서만 접근 가능
- private: 본인 클래스 내에서만 접근 가능
CODE로 보면 다음과 같습니다.
package java_test.accessModifier;
public class TestClass {
public Integer pValue;
protected Integer proValue;
private Integer privateValue;
public Integer getPrivateValue() {
return privateValue;
}
public void setPrivateValue(Integer privateValue) {
this.privateValue = privateValue;
}
public TestClass (Integer value) {
this.pValue = value;
this.proValue = value;
this.privateValue = value;
}
}
위 코드는 java_test.accessModifier package 에 TestClass 라는 이름의 클래스 입니다. 멤버 변수 들이 있고 각각 public, protected, private 가 있습니다. 그리고 이 변수들을 다른 클래스 에서 접근 해 보려고 합니다.
package java_test.accessModifier;
public class TestApplication {
public static void main(String[] args) {
TestClass tClass = new TestClass(100);
System.out.println(tClass.pValue);
System.out.println(tClass.proValue);
System.out.println(tClass.privateValue);
}
}
TestApplication 클래스는 java_test.accessModifier package 에 있고 TestClass 인스턴스화(생성) 해서 맴버 변수인 pValue(public), proValue(protected), privateValue(private)에 접근하는 코드 입니다. 위 코드를 돌리면.... 안돌아가죠 그이유는 tClass.privateValue 값을 에당초 접근할 수 없기 때문에 컴파일 에러가 나고 있는 상테입니다. 이처럼 public은 어디서든 접근할 수 있고, protected도 같은 package 에 있기 때문에 다행이 접근이 가능합니다. 하지만 만약 package가 달라지면 어떡게 될까요.?
package java_test.accessModifier.protectedPack;
import java_test.accessModifier.TestClass;
public class ProtectedTest extends TestClass {
public ProtectedTest(Integer value) {
super(value);
}
public static void main(String[] args) {
TestClass tc = new TestClass(200);
System.out.println(tc.pValue);
System.out.println(tc.proValue);
ProtectedTest pt = new ProtectedTest(300);
System.out.println(pt.proValue);
}
}
위 코드는 java_test.accessModifier.protectedPac package에 위차한 ProtectedTest Class 입니다. Test.java 클래스와 package가 다른것을 볼 수 있습니다. 그럼 TestApplication.java 에서 Test.java의 protected 멤버 변수에 접근 했듯이 접근 해보겠습니다. 그럼 아주 잘 작동 안하는 것을 볼 수 있습니다. TestClass tc = new TestClass(200)로 생성하고 tc.proValue로 접근 하려고하면 접근이 안되는 것을 볼 수 있습니다. 그이유는 package 위치가 동일 하지 안기 때문입니다 하지만 protected의 조건중에 자식 클래스에서는 접근이 가능하다라는 특성을 이용해서 부모인 TestClass를 상속아 접근하면 ProtectedTest pt = new ProtectedTest(300) 접근이 가능한것을 볼 수 있습니다.
https://github.com/jkkim09/JAVA-BASE/tree/master/src/main/java/java_test/accessModifier
'Tech > Java' 카테고리의 다른 글
main(String[] args) 메소드 깊이 있게 알아보자 (4) - main() method (0) | 2020.05.21 |
---|---|
main(String[] args) 메소드 깊이 있게 알아보자 (3) - Return Type (0) | 2020.05.21 |
main(String[] args) 메소드 깊이 있게 알아보자 (2) - static (0) | 2020.05.20 |
JVM(Java Virtual Machine) (0) | 2020.05.18 |
Java 입문부터 다시 시작 하기 (Hello World) (0) | 2020.05.18 |
댓글