외부로부터 데이터를 보호하기 위해 : 캡슐화
외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해
접근 제어자를 사용해 최소한으로 줄였다가 점차 넓혀가는 게 좋다.
iv 직접 접근보다 ✨private iv명
으로 보호한 뒤, ✨public 메소드명
을 통한 간접 접근이 훨씬 안전하다.
class Time {
private int hour; // 0~23만 가져야 한다.-> 접근 제한!!
// private int minute; // 직접 접근 제한하고
// private int second;
// public 메소드를 통한 간접 접근
// 시 입력받음
public void setHour(int hour) {
if (isNotValidHour(hour)) { // alt+shift+m
return;
}
this.hour = hour;
//false-> hour값 20으로 바뀜
}
// 매개변수로 받은 hour가 유효한지 확인
// 여기서만 쓰이기 때문에 private이 좋다.
private boolean isNotValidHour(int hour) {
return hour < 0 || hour > 23;
//0미만,23초과면 true->return문으로 밖으로 빠져나감
//그러면 저 메소드(t.setHour(100);)로 호출돼도 hour값이 100으로 안바뀜
}
// 입력받은 시 읽기, 반환
public int getHour() {
return hour;
}
}
public class TimeTest {
public static void main(String[] args) {
// 접근제어자 활용
Time t = new Time();
//t.hour = 100; <- private이므로 에러난다.
t.setHour(20); //false -> this.hour = 20
System.out.println(t.getHour());
t.setHour(100); //true -> return
System.out.println(t.getHour());
}
}
20
20
-> 업그레이드!
class Time{
private int hour;
private int minute;
private int second;
public int getHour() {
return hour;
}
public void setHour(int hour) {
if(isNotValidHour(hour)) return;
this.hour = hour;
}
private boolean isNotValidHour(int hour) {
return hour<0 || hour>23;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
if(isNotValidMinute(minute)) return;
this.minute = minute;
}
private boolean isNotValidMinute(int minute) {
return minute<0 || minute>59;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
if(isNotValidSecond(second)) return;
this.second = second;
}
private boolean isNotValidSecond(int second) {
return second<0 || second>59;
}
}
public class TimeTest {
public static void main(String[] args) {
Time t = new Time();
t.setHour(22);
t.setMinute(59);
t.setSecond(600);
System.out.println(t.getHour()+"시 "+t.getMinute()+"분 "+t.getSecond()+"초");
t.setHour(2);
System.out.println(t.getHour()+"시 "+t.getMinute()+"분 "+t.getSecond()+"초");
}
}
22시 59분 0초
2시 59분 0초