캡슐화란? 메서드를 통한 간접 접근을 허용함으로써 외부에서 직접 접근하지 못하도록 함
✔ 외부로부터 데이터를 보호하기 위해
✔ 외부에는 불필요한 내부적으로 사용되는 부분을 감추기 위해
접근 제어자 (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 메서드를 제공
출처:자바의정석기초편(남궁성 저)
'Backend > Java' 카테고리의 다른 글
| 예외처리 개념 (0) | 2022.07.20 |
|---|---|
| this와 super (0) | 2022.07.11 |
| 오버라이딩과 오버로딩 (0) | 2022.07.11 |
| 클래스 메서드(static 메서드)란? (0) | 2022.07.07 |
| 반복되는 음수값이 있는 총합 구하기 (0) | 2022.06.29 |