자료 추상화


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는 자료 구조 이상을 표현한다. (클래스 메서드가 접근 정책을 강제한다)

  1. 좌표를 읽을 때는 각 값을 개별적으로 읽어야 한다.
  2. 좌표를 설정할 때는 두 값을 한꺼번에 설정해야 한다.

구현을 감추려면 추상화가 필요하다.

getter와 setter로 변수를 다룬다고 클래스가 되는 것이 아니라 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.

public interface Vehicle {
    double getFuelTankCapacityInGallons();
    double getGallonsOfGasoline();
}
public interface Vehicle {
    double getPercentFuelRemaining();
}