티스토리 뷰



public class Person {

public String name;

public int age;

private double weight;

}


public class Test {

public void main (String[] args) {

Person people = new Person();

people.name  = "John";

people.age = 20;

people.weight = 65.8;

}

}


상단의 코드를 진행하면 어떤 결과가 나올까?

정답은 " PrivateAccess 에러 " 이다. private로 선언된 weight의 변수에 접근하려고 하니 저런 에러가 발생하는 것이다. 실제로 이클립스에서는 people.weight = 65.8을 넣을때 "The field Person.weight is not visible" 라는 에러문구가 나온다.




그렇다면 private 변수에 접근하고싶을땐 어떻게 하는것이 좋을까?


정답은 public 메소드를 이용하여 private 변수를 제어하는 것이다.

(같은 클래스 내에있는 변수들은 private인지 public인지 신경쓰지 않는다. 접근제어가 뭐든지 같은 클래스내에 있으므로 서로 장벽없이 사용할 수 있기 때문이다.)


상단의 코드에서 몇개의 public 메소드를 추가하여 private 변수들을 외부에서 부를 수 있게 해보자.

public class Person {

public String name;

public int age;

private double weight;


//몸무게 수치를 받아서 private변수인 weight에 값 할당해주는 public 메소드 추가

public void setWeight(double publicWeight) {

weight = publicWeight;

}


//setWeight메소드에서 할당한 weight변수값을 외부로(지금은) 리턴해주는 public 메소드 추가

public double getWeight() {

return weight;

}

}


public class Test {

public void main (String[] args) {

Person people = new Person();

people.name  = "John";

people.age = 20;

people.setWeight(65.8); //몸무게 할당

double realWeight = people.getWeight(); //몸무게 값 리턴받음

System.out.println("몸무게는 " + realWeight + "kg 입니다.");

}

}


결과는 

몸무게는 68.5kg 입니다.

가 출력된다.



그렇다면 이렇게 굳이 public 메소드를 써가면서 까지 private 접근제어를 사용하는 이유는 뭘까?

답은 캡슐화, 자료보호목적에 있다.


간단히 설명하면, 우리가 음식점에 갔을 때, 우리는 음식을 결정하고 돈을 건넨다. 그리고 나서 음식이 나오면 먹고 갈 뿐이다. 여기서 우리는 음식점에서 우리가 주문한 음식이 어떻게 만들어지는지를 알고 싶지도 않을 뿐더러 알 필요로 없다.

이럴 경우에 private 접근제어를 사용하는 것이다. (private 접근제어자는 변수 뿐만 아니라 메소드에도 붙을 수 있음) 


즉, 우리가 외부에서 값을 필요로 할 순 있지만, 그 내부 사정이 어떻게 돌아가는지 알 필요 없을 경우에 private 접근제어자를 사용하는 것이다. 그럴 경우 해당 변수의 보안 측면에서도 자료 보호가 가능하고, 복잡한 로직을 굳이 알 필요없으므로 모두에게 좋은 방법이 될 수 있다.


private 접근제어자 사용 이유

1) 자료보호

2) 내부적으로만 사용하면 되기 때문



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함