자바에는 다음과 같은 접근 제어자가 있다.
private → default → protected → public 순으로 보다 많은 접근을 허용한다.
private이 붙은 변수, 메소드는
Example
public class AccessModifier { private String secret; private String getSecret() { return this.secret; } }
위 예제의
secret
변수와getSecret()
메소드는 오직AccessModifier
클래스에서만 접근이 가능하다.
접근 제어자를 별도로 설정하지 않는다면, 접근 제어자가 없는 변수, 메소드는
Example
package jump2java.house; public class HouseKim { String lastname = "kim"; }
package jump2java.house; public class HousePark { String lastname = "park"; public static void main(String[] args) { HouseKim kim = new HouseKim(); System.out.println(kim.lastname); } }
HouseKim
과HousePark
의 패키지는 jump2java.house 로 동일하다.HouseKim
클래스의lastname
변수는 접근제어자가 default 이므로HousePark
클래스에서main
메소드에서 사용한 것과 같이kim.lastname
으로HouseKim
의lastname
변수에 접근이 가능하다.
접근 제어자가 protected로 설정되었다면, protected가 붙은 변수, 메소드는
에서 접근이 가능하다.
Example
package jump2java.house; public class HousePark { protected String lastname = "park"; }
package jump2java.house.person; import house.HousePark; public class EungYongPark extends HousePark { public static void main(String[] args) { EungYongPark eyp = new EungYongPark(); System.out.println(eyp.lastname); } }
HousePark
클래스를 상속받은EungYongPark
이라는 클래스의 패키지는 jump2java.house.person으로HousePark
의 패키지인 jump2java.house와 다르지만HousePark
의lastname
변수가protected
로 설정되었기 때문에eyp.lastname
과 같은 접근이 가능하다.만약
lastname
의 접근제어자가 protected 가 아닌 default 접근제어자였다면eyp.lastname
문장은 컴파일 에러를 유발 할 것이다.
접근 제어자가 public으로 설정되었다면 public 접근 제어자가 붙은 변수, 메소드는
Example
package jump2java.house; public class HousePark { protected String lastname = "park"; public String info = "this is public message."; }
위 예제의
HousePark
의info
변수는 public 접근제어자가 붙어 있으므로 어떤 클래스에서던지 접근이 가능하다.