public class Point {
public double x;
public double y;
}
public interface Point {
double getX();
double getY();
void setCartesian(double x, double y);
double getR();
double getTheta();
void setPolar(double r, double theta);
}
위 두 클래스 모두 2차원 점을 표현한다. 한 클래스는 구현을 외부로 노출하고, 다른 클래스는 구현을 완전히 숨긴다.
6-1은 구현을 노출한다. 변수를 private
로 해도 각 값마다 getter, setter를 제공한다면 구현을 외부로 노출하는 셈이다.
6-2는 자료 구조 이상을 표현한다. (클래스 메서드가 접근 정책을 강제한다)
구현을 감추려면 추상화가 필요하다.
getter와 setter로 변수를 다룬다고 클래스가 되는 것이 아니라 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
public interface Vehicle {
double getFuelTankCapacityInGallons();
double getGallonsOfGasoline();
}
public interface Vehicle {
double getPercentFuelRemaining();
}