아래의 첫번째 예시를 보자.

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! 자바 프로그래밍 입문 - 박은종

+ Recent posts