기본 개념
데이터 구조는 데이터만 보유하도록 구현된 특수 클래스로 정의됩니다. 자동차, 아이, 동물, 이벤트, 직원, 회사, 고객 등. 이러한 데이터는 일반적으로 다른 클래스의 시작 부분에서 인스턴스 변수로 선언되거나 간주됩니다.
이 클래스의 메소드는 실제 중요한 작업을 수행하지 않아야 합니다. 그렇지 않으면 데이터 구조 클래스는 더 이상 데이터 구조가 아닙니다!
따라서 주로 메서드는 getter 및 setter(즉, 접근자 및 변경자)입니다. 일반적으로 인스턴스 변수가 비공개로 처리되기 때문입니다. 다른 의견이 있습니다. 데이터 구조 변수는 공개되어야 하고 클래스의 인스턴스에서 직접 액세스할 수 있지만 비공개 변수 개념이 더 나은지에 대해서는 논쟁의 여지가 있습니다.
- 이 맥락에서 데이터 구조 클래스는 데이터(변수)를 나타내거나 노출하며 의미 있는(중요한) 메서드나 기능이 없습니다.
- MainActivity, ListAdapter, Calculator, Iterator와 같은 일반 클래스(여기서는 Object라고 함)는 데이터를 숨기고 해당 데이터에서 작동하는 메서드를 표시하거나 노출합니다.
따라서 문제를 해결하기 위한 두 가지 접근 방식이 있습니다. 즉, 가장 순수한 형태로 데이터 구조를 구현하는 반면, 데이터에 대한 작업을 빌드하기 위해 또 다른 Object 클래스를 구축하거나, 모델 클래스를 Object 클래스로 만들어 데이터를 숨길 수 있습니다. 데이터는 다음 예와 같이 메소드를 노출하는 동안
public class Square { public Point topLeft1; public double side1; } public class Rectangle { public Point topLeft1; public double height1; public double width1; } public class Circle { public Point center1; public double radius1; } 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.side1 x s.side1; }else if (shape instanceof Rectangle) { Rectangle r = (Rectangle)shape; return r.height1 x r.width1; }else if (shape instanceof Circle) { Circle c = (Circle)shape; return PI x c.radius1 x c.radius1; } throw new NoSuchShapeException(); } }
이 솔루션에서 도형은 데이터 구조로 처리되고 기하학 클래스는 객체로 처리됩니다.
장점 − 더 많은 메소드를 추가해야 하는 경우 Geometry 클래스에만 추가합니다(이 솔루션이 구현되어야 하는 시간입니다).
단점 − 더 많은 데이터 구조(예:더 많은 모양)를 추가해야 하는 경우 Geometry 클래스의 모든 메소드를 변경해야 합니다.
데이터 구조와 객체의 차이점
- 객체는 동작을 노출하고 데이터를 숨깁니다. 이를 통해 기존 동작을 변경하지 않고 새로운 종류의 객체를 간단하게 추가할 수 있습니다. 또한 기존 개체에 새로운 동작을 추가하기가 어렵습니다.
- 데이터 구조는 데이터를 나타내거나 노출하며 중요한 동작이 없습니다. 이렇게 하면 기존 데이터 구조에 새로운 동작을 간단하게 추가할 수 있지만 기존 함수에 새 데이터 구조를 추가하는 것은 어렵습니다.