클래스 외부에서 데이터에 직접 접근하는것을 막는 것
public class Circle {
double rad = 0;
final double PI = 3.14;
public Circle(double r) {
setRad(r);
}
public void setRad(double r) {
if (r < 0) {
rad = 0;
return;
}
rad = r;
}
public double getArea() {
return (rad * rad) * PI;
}
}
public class Circle2 {
public static void main(String[] args) {
Circle c = new Circle(1.5);
System.out.println(c.getArea());
c.setRad(2.5);
System.out.println(c.getArea());
c.setRad(-3.3);
System.out.println(c.getArea());
c.rad = -4.5;
System.out.println(c.getArea());
}
}
위 Circle 코드에서 변수를 선언하고 Circle2에서 결과값을 출력하는 클래스를 각각 만들었을 때,
. 을 이용하여 외부에서 클래스를 가져올 경우에 정보를 은닉하지않으면 컴파일 오류는 발생하지 않으나 논리적인 오류가 발생할 수 있다. 그러므로 이때 private를 이용하여 자신이 원하는 변수를 결과값에 이용하도록 하기 위해서는 이용을 원하지 않는 변수에 private를 붙여주면 된다
public class Circle {
private double rad = 0;
final double PI = 3.14;
public Circle(double r) {
setRad(r);
}
public void setRad(double r) {
if (r < 0) {
rad = 0;
return;
}
rad = r;
}
public double getArea() {
return (rad * rad) * PI;
}
}
public class Circle2 {
public static void main(String[] args) {
Circle c = new Circle(1.5);
System.out.println(c.getArea());
c.setRad(2.5);
System.out.println(c.getArea());
c.setRad(-3.3);
System.out.println(c.getArea());
c.rad = -4.5;
System.out.println(c.getArea());
}
}
위와 같이 double rad = 0 에 private를 붙여주면 Circle2클래스의 c.rad 에서 -를 입력하는 논리적 오 류를 방지할 수 있다 (컴파일 오류가 생겨서 작동이 불가능해지므로)
private에는 같은 클래스가 아닌 이상 직접 접근이 불가능해진다
변수의 이름을 기반으로 set, get 등 값을 꺼내가기 위한 메소드를 제공하면 이 값을 가져가는 통로가 된다. (Setter, Getter)
자바에서 제공하는 접근 수준 지시자
public > protected > default > private
클래스 정의 대상: public, default
인스턴스 변수와 메소드 대상: public, protected, default, private