접근제어(Access Control)은 다른 클래스가 특정 필드나 메소스에 접근하는 것을 제어하는 것이다.
접근제어에는 두가지의 수준이 있다.
클래스 수준에서의 접근 제어 : 클래스를 다른 클래스가 사용하게 하거나 못하게 하는것. - public을 붙이면 공용 클래스가 된다.
멤버 수준에서의 접근 제어 : 필드나 메소드를 다른 클래스가 사용하게 하거나 못하게 하는것.
멤버 수준에서의 접근제어는 3가지로 나눌수있다.
전용 멤버 : 클래스 내부에서만 접근이 허용된다. (private 를 이름 앞에 붙임)
패키지 멤버 : 멤버를 정의 할때 아무런 접근 지정자를 붙이지 않으면 자동적으로 패키지 멤버로 된다. 패키지멤버는 같은 패키지 안에 있는
모든 클래스가 접근할 수 있다. 패키지는 클래스들이 모인것 - 대부분 선호 하지않는다.
공용 멤버 : 공용 멤버는 다른 모든 클래스들이 사용할 수 있다. (public을 이름 앞에 붙임)
이것들을 가리켜 캡슐화라한다.
ex)
public class Test {
public static void main(String[] args) {
Employee e = new Employee("홍길동",0,3000);
e.salary = 300; // private로 선언되어 호출할수없다.
e.age = 26; // package라서 가능하다
int sa = e.getSalary(); // private로 선언되어 호출할수없다.
String s = e.getName();
int a = e.getAge();
}
}
class Employee {
private String name; // private
private int salary; // private
int age; // package
public Employee(String n, int a, int s) { // 생성자
name = n;
age = a;
salary = s;
}
public String getName() { // public 접근자
return name;
}
private int getSalary() { // private 접근자
return salary;
}
int getAge() { // package 접근자
return age;
}
}
위의 코드를 적게되면 당연히 컴파일 될수없다.
따라서 실행 할수 있게 바꾸어준다면 이렇게 될것이다.
public class Test {
public static void main(String[] args) {
Employee e = new Employee("홍길동",0,3000);
e.salary = 300; // public 으로 바꾸어서 호출 가능
e.age = 26; // package라서 가능하다
int sa = e.getSalary(); // public으로 바꾸어서 호출가능
String s = e.getName();
int a = e.getAge();
}
}
class Employee {
private String name; // private
public int salary; // public
int age; // package
public Employee(String n, int a, int s) { // 생성자
name = n;
age = a;
salary = s;
}
public String getName() { // public 접근자
return name;
}
public int getSalary() { // public 접근자
return salary;
}
int getAge() { // package 접근자
return age;
}
}
'JAVA' 카테고리의 다른 글
JAVA 기초 자료형 종류 (0) | 2014.05.22 |
---|---|
JAVA String 입력시 next()와 nextLine()의 차이 (0) | 2014.05.22 |
JAVA 생성자, 설정자, 접근자 (0) | 2014.05.22 |
JAVA 들여쓰기 단축키 (0) | 2014.05.22 |
JAVA 클래스와 객체(class & object) - 객체(object), 클래스(class) (2) | 2014.05.12 |