변수를 비공개로 정의하는 이유는 남들이 변수에 의존하지 않게 만들고 싶어서다.
어째서 많은 프로그래머가 getter 와 setter 를 당연하게 공개해 비공개 변수를 외부에 노출할까?
변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다.
getter, setter 만 구현해 놓는다고 추상화가 아니다.
추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
public interfcae Vehicle {
double getFuelTankCapacityInGallons();
double getGallonsOfGasoline();
}
public interface Vehicle {
double getPercentFuelRemaining();
}
아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.