<aside> 💡 어째서 수많은 프로그래머가 조회(get) 함수와 설정(set) 함수를 당연하게 공개(public)해 비공개 변수를 외부에 노출할까?
</aside>
변수를 비공개(private)로 정의하는 이유는 뭘까?
→ 남들이 변수에 의존하지 않게 만들고 싶어서
→ 변수 타입이나 구현을 맘대로 바꾸게 하지 못 하도록
1 자료 추상화
구체적인 클래스와 추상적인 클래스를 비교해보자
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);
}
위 코드는, 개별적으로 좌표값을 읽고 설정하게 강제한다. 또한 구현이 노출되어 변수를 private 선언했더라도, get과 set을 제공한다면 구현을 외부로 노출시킨다.
반면, 아래 코드는 클래스 메서드가 접근 정책을 강제하며, 좌표는 각 값을 개별적으로 읽어야한다.
→ 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지 않는다.
→ 구현을 감추려면 추상화가 필요하다
public interface Vehicle {
double getFuelTankCapacityInGallons();
double getGallonsOfGasoline();
}
public interface Vehicle {
double getPercentFuelRemaining();
}
2 자료/객체 비대칭