캡슐화와 접근 제어자

essential·2023년 7월 23일

객체 지향

목록 보기
25/40

접근 제어자를 사용하는 이유

  • 외부로부터 데이터를 보호하기 위해서
public class Time {
	public int hour;
	public int minute;
	public int second;
}

Time t = new Time();
t.hour = 25; // 멤버 변수에 직접 접근
public class Time {
	private int hour; //외부 접근 막는다 
	private int minute;
	private int second;
	
	public int getHour() { return hour; } //메서드에서 iv에 접근(간접 접근)
	public void setHour(int hour) {
				if (hour < 0 || hour > 23) return; // 값을 보호 (if 문이 1 이 되어서 return 문을 만나서 빠져나가니까 hour 의 값이 바뀌지 않음 (private 의 값))
				this.hour = hour;

	Time t = new Time();
	t.hour = 25; // 멤버 변수에 직접 접근

예제 TimeTest

class Time {
	int hour; // 0~23 사이의 값을 가져야 함
  int minute;
	int second;
}
public void setHour(int hour) {
		if (isNotValidHour(hour)) return; // 값을 보호 (if 문이 1 이 되어서 return 문을 만나서 빠져나가니까 hour 의 값이 바뀌지 않음 (private 의 값))
		this.hour = hour;
}

private boolean isNotValidHour(int hour) { 
// 매개변수로 넘겨진 hour 가 유효한지 확인해서 알려주는 메서드
// 내부에서 쓰니까 public 일 필요가 없음 (테스트 범위가 줄어듦)
		return hour < 0 || hour > 23;

public class TimeTest {
	public static void main(String[] args) {
			Time t = new Time();
			t.setHour(21); //
			System.out.println(t.getHour())
     	t.setHour(100);
			System.out.println(t.getHour()) // 100은 유효한 값이 아니라서 hour 의 값이 변경되지 않아서 21이 찍힘

	}
}
profile
essential

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기