Backend/Java
캡슐화와 접근제어자
surge_95
2022. 7. 12. 19:31
캡슐화란? 메서드를 통한 간접 접근을 허용함으로써 외부에서 직접 접근하지 못하도록 함
✔ 외부로부터 데이터를 보호하기 위해
✔ 외부에는 불필요한 내부적으로 사용되는 부분을 감추기 위해
접근 제어자 (access modifier) : 클래스,멤버변수,메서드,생성자에 사용하여 외부의 접근 제한
*접근 제어자의 범위는 최대한 좁히는 것이 좋다(수정 시 범위를 찾기 용이함)
- private : 같은 클래스
- (default) : 같은 클래스 + 같은 패키지
- protected : 같은 클래스 + 같은 패키지 + 자손클래스 (다른 패키지)
- public : 전체(접근 제한 없음)
class Time {
private int hour; // 0~23사이의 값을 가져야함
private int minute;
private int second;
public void setHour(int hour) {
if(isNotValidHour(hour)) return; // 메서드 생성 : alt + shift + m
this.hour = hour;
}
// 매개변수로 넘겨진 hour가 유효한지 확인해서 알려주는 메서드
// 내부에서만 쓰이는 메서드이므로 public일 필요없음(범위 좁히기)
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());
t.setHour(100);
System.out.println(t.getHour()); // 여전히 21(23초과이므로 return)
}
}
→ 멤버변수를 private이나 protected로 제한하고 멤버변수의 값을 읽고 변경할 수 있는 public 메서드를 제공
출처:자바의정석기초편(남궁성 저)