접근 제어자를 사용하는 이유
- 클래스 내부에 선언된 데이터를 보호하기 위함. (접근을 제어하기 위함)
- 외부에 불필요한 , 내부적으로만 사용되는 부분 감추기 위해서
다음처럼 시간을 표시하기 위한 클래스를 만들때 이클래스의 맴버변수 hour, minute, second는
각각 0-24 , 0-59, 0-59와 같은 범위를 지켜져야 한다. 하지만 hour = 25; 이렇게 누군가 수정한다해도 막을 방법이 없다.
따라서 다음 예문과 같이 작성하여 클래스 맴버에 직접적으로 접근할 방법을 차단시킬 수 있다.
또한 조건에 맞지않으면 입력을 방지할 수 있다.
class time1 {
private int hour;
private int minute;
private int second;
public int getHour() { return hour;}
public void setHour(int hour) {
if(hour < 0 || hour >23) return;
this.hour = hour;
}
public int getMinute() { return minute;}
public void setMinute(int minute) {
if(minute <0 || minute > 59) return;
this.minute=minute;
}
public int getSecond() { return second;}
public void setSecond(int second){
if(second<0 || second > 59) return;
this.second =second;
}
}
다음과 같이 접근할 수 있다.
public class TimeTest {
public static void main(String[] args) {
Time1 t = new Time1();
// t.hour = -100; //에러발생.
t.setHour(21); // hour의 값을 21로 변경
System.out.println(t.getHour());
}
}
다음과 같이 객체를 생성한 후 내부의 변수값을 직접 변경하려 하면 에러가 발생한다.
t.hour = 100 ; → 에러발생.
따라서 get,set메서드를 통해서만 읽고 쓰기가 가능하다.
이런 경우를 캡슐화라고 볼 수 있다.