자바는 접근제어자를 사용해 변수나 메소드의 사용 권한을 설정할 수 있다.
변수나 메소드의 사용 권한은 다음과 같은 접근 제어자를 사용해 설정할 수 있다.
1. pirvate
2. default
3. protected
4. public
private
< default
< protected
< public
순으로 많은 접근을 허용한다.
private이 붙은 변수, 메소드는 해당 클래스에서만 접근 가능
public class Sample{
private String secret;
private String getSecret();{
return this.secret;
}
}
secret 변수와 getSecret() 메소드는 오직 Sample 클래스에서만 접근 가능
접근 제어자를 별도로 사용하지 않는다면 접근 제어자가 없는 변수/메소는 default 접근 제어자가 되어 해당 패키지 내에서만 접근 가능
예제)house/HouseKim.java
package house; // 패키지 동일
public class HouseKim{
String lastname = "kim"; // lastname은 default 접근제어자로 설정된다.
}
house/HousePark.java
package house; // 패키지 동일
public class HousePark{
String lastname = "park";
public static void main(String[] args){
HouseKim = new HouseKim();
System.out.println(kim.lastname); // HouseKim 클래스의 lastname 변수 사용 가능
}
}
HouseKim과 HousePark 패키지는 house로 동일하다. 따라서 HousePark 클래스에서 HouseKim의 lastname
변수에 접근이 가능하다.
예) house/HousePark.java
package house; // 아래와 패키지 다름
public class HousePark{
protected String lastname = "park";
}
예) house/person/EunYoungPark.java
package house.person; // 위와 패키지 다름
import house. HousePark;
public class EunYoungPark extends HousePark{ // HousePark 상속받음
public static void main(String[] args){
EunYoungPark eyp = new EunYoungPark();
System.out.println(eyp.lastname); // 상속한 클래스의 protected 변수는 접근 가능
}
}
위 두가지 예는 패키지가 다르지만 HousePark의 lastname 변수가 protected
이므로 eyp.lastname
과 같은 접근이 가능하다.
public 접근제어자가 붙은 변수/메소드는 어떤 클래스에서라도 접근 가능.
package house;
public class HousePark{
protected String lastname = "park";
public String info = "this is public message.";
}
위 예제에서 info 변수는 public 접근제어자가 붙어 있으므로 어떤 클래스라도 접근이 가능하다.
클래스나 메소드 역시 접근제어자 규칙을 따른다.
접근제어자를 모두 public으로 설정해도 프로그램은 작동할 것이다. 그러나 접근제어자를 이용하면 프로그래머의 실수 방지 및 기타 위험요소 제거 등의 장점이 있다.