접근제어자를 통해서 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; }
'Java > Java 기초' 카테고리의 다른 글
Java Stack 구현 (0) | 2018.05.24 |
---|---|
XSS(Cross-site scripting) 특수문자 치환 (0) | 2018.05.10 |
Arrays.binarySearch() 사용 (0) | 2017.12.29 |
쓰레드(Thread)의 사용 (0) | 2017.12.27 |
스태틱(static) (0) | 2017.11.23 |