728x90
SMALL
아래의 첫번째 예시를 보자.
public 접근 제어자를 사용해서 언제든지 멤버 변수의 값이 바뀌도록 했다.
package hiding;
public class Student {
public int studentID;
public String studentName;
public int grade;
public String address;
}
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student student = new Student();
student.studentName="홍길동";
System.out.println(student.studentName);
}
}
그리고 두번째 예시를 보자.
getter, setter 함수를 이용해 private 멤버변수를 접근하도록 했다.
package hiding;
public class Student {
public int studentID;
private String studentName;
public int grade;
public String address;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student student = new Student();
//student.studentName="홍길동";
student.setStudentName("홍길동");
System.out.println(student.getStudentName());
}
}
접근 제어자를 private으로 선언하면 외부 클래스에서 사용할 수 없다.
그리고 위 1, 2예시 모두 결국엔 변수를 사용할 수 있다.
그렇다면 굳이 왜 접근제어자를 private으로 써서 귀찮게 메서드를 만들어 사용하는게 바람직한걸까?
다음 예제를 보면서 알아보자.
학생수가 32명있어서 학번을 1부터 32번까지 할당하는데 누군가의 실수로 학번이 33번이라고 입력된다고 해보자.
메서드에 조건문을 달아주면 오류가 나더라도 그 값이 해당 변수에 대입되지 않아 정보의 오류를 막을 수 있다
package hiding;
public class Student {
private int studentID;
public String studentName;
public int grade;
public String address;
public int getStudentID() {
return studentID;
}
public void setStudentID(int studentID) {
if(studentID >32) {
System.out.println("오류, 다시 입력하시오");
}else {
this.studentID = studentID;
}
}
}
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student student = new Student();
student.setStudentID(33);
}
}
이치럼 클래스 내부에 사용할 변수나 메서드는 private으로 선언해서 외부에서 접근하지 못하도록 하는 것을 정보 은닉이라고 한다
출처 : Do it! 자바 프로그래밍 입문 - 박은종
728x90
LIST
'Java' 카테고리의 다른 글
[Java] 깊은 복사 VS 얕은 복사 쉽게 이해하기 (0) | 2023.05.16 |
---|---|
[Java] 이클립스 콘솔창 한글깨짐 현상 해결방법 (0) | 2023.04.05 |