ch7-22 캡슐화와 접근 제어자
접근 제어자는 외부로부터 데이터를 보호하기 위해서 사용한다. 이를 캡슐화라 한다.
Time 클래스를 만들었을 때 멤버를 public 제어자로 썼을 때 접근 제한이 없기 때문에 객체를 생성하고, t.hour = 25;로 직접 접근해서 값을 변경할 수 있다. int의 범위는 ±20억으로 사용은 할 수 있지만, hour는 시간으로 범위가 0~23로 제한되야 한다. 따라서 iv를 보호하기 위해서는 제어자를 public이 아니라 private를 사용해서 외부의 접근을 막는다. 메서드는 public으로 만들어 iv에 간접적으로 접근한다.
t.hour에 대입 연산자를 사용해서 직접 접근하지 않고, t.setHour 메서드를 이용해서 간접 접근으로 바꾼다. 이런 식으로 직접 접근을 막고 간접 접근을 통해 데이터를 보호하는 것이 캡슐화이다. 접근 제어자는 좁히면 좁힐수록 좋고 필요할 때 넓히는 식으로 수정해야 한다.
실습
t.setHour(100);을 입력해도 return을 받아 빠져나오기 때문에 값이 바뀌지 않아 21이 2번 출력된다.
굳이 isNotValidHour 메서드를 public으로 쓸 필요가 없다. isNotValidHour 메서드는 Time 클래스에서만 사용하므로 제어자 private를 붙이는 것이 좋다. 만약 코들를 수정해야 할 경우가 있을 때 private를 보면 class 안에서만 확인하면 되는 것을 알 수 있다. public을 썼다면 소스 파일의 클래스 외부까지 다 뒤져야 한다. 따라서 접근제어자의 범위는 좁혀놓고 넓힌다.
⭐ 참고 : 조건식 메서드로 추출 하는 법
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-24,25 참조변수의형변환(1) (0) | 2023.04.19 |
---|---|
ch7-23 다형성 (0) | 2023.04.19 |
ch7-21 접근제어자 (0) | 2023.04.18 |
ch7-17~20 제어자, static, final, abstract (0) | 2023.04.17 |
ch7-15, 16 import문, static import문 (0) | 2023.04.16 |