6장 객체와 자료구조

<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 자료/객체 비대칭