자료 추상화

// 구체적인 Point 클래스
public class Point1 {
	public double x;
	public double y;
}

// 추상적인 Point 클래스
public class Point2 {
	double getX();
	double getY();
	void setCartesian(double x, double y);
	double getR();
	double getTheta();
	void setPolar(double r, double theta);
}

<aside> 💡 추상화와 캡슐화의 차이?

</aside>

// 구체적인 Vehicle 클래스
public interface Vehicle {
	double getFuelTankCapacityInGallons();     // 변수값을 읽어 반환할 뿐
	double getGallonsOfGasoline();
}

// 추상적인 Vehicle 클래스
public interface Vehicle {
	double getPercentFuelRemaining();          // 정보가 어디서 오는지 드러나지 않는다
}

자료 / 객체 비대칭

객체 추상화 뒤로 자료를 숨김. 자료를 다루는 함수만 공개

자료 구조 자료를 그대로 공개. 별다른 함수 제공하지 않음.


1. 절차적인 도형

각 도형 클래스는 간단한 자료 구조, 아무 메서드도 제공하지 않아요.

//// 도형 자료 구조
public class Square { 
	public Point topLeft; 
	public double side;
}

public class Rectangle { 
	public Point topLeft; 
	public double height; 
	public double width;
}

public class Circle { 
	public Point center; 
	public double radius;
}

public class Geometry {
	public final double PI = 3.141592653589793;

	public double area(Object shape) throws NoSuchShapeException {
		if (shape instanceof Square) { 
			Square s = (Square)shape; 
			return s.side * s.side;
		} else if (shape instanceof Rectangle) { 
			Rectangle r = (Rectangle)shape; 
			return r.height * r.width;
		} else if (shape instanceof Circle) {
			Circle c = (Circle)shape;
			return PI * c.radius * c.radius; 
		}
		throw new NoSuchShapeException(); 
	}

	//// 새로운 함수 추가 자유로움.
}