ch7-22 캡슐화와 접근 제어자
🌮 접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서
- 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
public class Time {
// 접근제한이 없음
public int hour;
public int minute;
public int second;
}
Time t = new Time();
t.hour = 25; // 멤버변수에 직접 접근 가능
✍ 변수를 보호하기 위해서
public class Time {
// private = 외부접근 막는다. (직접접근 금지)
private int hour;
private int minute;
private int second;
//메서드를 통해서 iv에 접근하는건 ok. (간접접근 허용)
public int getHour() { return hour;} //메서드는 public
public void setHour() {
if (hour <0 || hour > 23) return;
this.hor = hour;
}
}
Time t = new Time();
t.hour = 25; // 에러. 멤버변수에 직접 접근 불가
-> t.setHour(25); 로 변경
if문으로 걸러짐 == 값을 보호 (원하지않는 엉뚱한 값이 되지않도록)
예제)
class Time {
private int hour; // 0~23사이의 값을 가져야함.
private int minute;
private int second;
public void setHour(int hour) {
if(isNotValidHour(hour)) return;
this.hour = hour;
}
// 매개변수로 넘겨진 hour가 유효한지 확인해서 알려주는 메서드
private boolean isNotValidHour(int hour) {
return hour < 0 || hour > 23;
}
public int getHour() { return hour;}
}
public class TimeTest {
public static void main(String[] args) {
Time t = new Time();
//t.hour = 100;
t.setHour(21); // hour값을 21로 변경
System.out.println(t.getHour()); // 21
t.setHour(100); // 비정상적인 값 반영 x
System.out.println(t.getHour()); // 21
}
}
'Dev > Java' 카테고리의 다른 글
[Java] 자바의 정석 기초편 ch7-24,25 참조변수의 형변환 (0) | 2022.06.22 |
---|---|
[Java] 자바의 정석 기초편 ch7-23 다형성(polymorphism) (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-21 접근제어자(access modifier) (0) | 2022.06.21 |
[Java] 제네릭 (Generic) (0) | 2022.06.16 |
[Java] 자바의 정석 기초편 ch7-17~20 제어자, static, final, abstract (0) | 2022.06.15 |