POST

JAVA 접근제어

접근제어(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;

}

}