Java/Java 기초
접근제어자 public, protected, default, private
code0xff
2017. 12. 23. 20:32
접근제어자를 통해서 class간 변수 및 메소드 접근을 제어할 수 있다.
public: 어떠한 조건에서도 모두 사용할 수 있다.
protected: 같은 패키지 내에 존재하는 class나 상속 class에서 사용할 수 있다.
defualt: 아무 것도 붙이지 않는 경우 default가 되며, 동일 패키지 내에 존재하는 class의 변수와 함수를 사용할 수 있다.
private: 선언된 class 내부에서만 사용이 가능하다.
구체적인 테스트는 아래의 소스를 참고하자.
package package1; import package2.Class3; public class Class1 { public String publicVar1; protected String protectedVar1; String defaultVar1; private String privateVar1; public void test1() { Class2 c2 = new Class2(); publicVar1 = c2.publicVar2; protectedVar1 = c2.protectedVar2; defaultVar1 = c2.defaultVar2; // private 변수는 확인할 수 없다는 메시지와 함께 컴파일 에러가 발생한다. // privateVar1 = c2.privateVar2; Class3 c3 = new Class3(); publicVar1 = c3.publicVar3; // protected와 default는 동일 패키지 안에서는 사용가능하지만 다른 패키지에 있는 class 변수와 메서드는 사용할 수 없다. // protected는 동일 패키지가 아니더라도 상속을 받은 경우라면 사용이 가능하다. // protectedVar1 = c3.protectedVar3; // defaultVar1 = c3.defaultVar3; // privateVar1 = c3.privateVar3; Class4 c4 = new Class4(); publicVar1 = c4.publicVar4; protectedVar1 = c4.protectedVar4; defaultVar1 = c4.defaultVar4; // 동일 Java파일 내에 있어도 다른 클래스라면 private 변수는 사용할 수 없다. // privateVar1 = c4.privateVar4; } } class Class4 { public String publicVar4; protected String protectedVar4; String defaultVar4; private String privateVar4; }
package package1; import package2.Class3; public class Class2 extends Class3 { public String publicVar2; protected String protectedVar2; String defaultVar2; private String privateVar2; public void test2() { publicVar2 = publicVar3; // 다른 패키지에 있지만 상속받고 있기 때문에 protected 접근제어자를 가진 변수에 접근할 수 있다. protectedVar2 = protectedVar3; // defaultVar2 = defaultVar3; // privateVar2 = privateVar3; } }
package package2; public class Class3 { public String publicVar3; protected String protectedVar3; String defaultVar3; private String privateVar3; }