본문 바로가기
Dev/Java

[Java] 자바의 정석 기초편 ch7-22 캡슐화와 접근 제어자

by 코딩삐약 2022. 6. 22.

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
   }
}