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 메서드를 제공

 

출처:자바의정석기초편(남궁성 저)