자료구조와 객체지향에 대해서 이야기 한 챕터입니다.
두개가 서로 정 반대라고 주장하고 용도에 맞게 잘 써야한다고 합니다.
객체지향의 목적은 캡슐화. 쉽게 말하면 사용자가 내부구조를 알 수 없게 잘 숨기는 것이고
자료구조는 구조를 그대로 두고 따로 함수를 제공하지 않는 경우를 말합니다.
도형을 나타내는 코드가 이해하기 쉽고 인상깊어서 아래 남기겠습니다.
자료구조
- 함수를 추가할때 도형 클래스 수정할 필요 없음
- 도형 추가하때는 함수들을 수정해야함
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();
}
}
객체지향
- 도형을 추가하면 기존함수가 수정필요 없음
- 함수를 추가하면 도형클래스 전부 고쳐야함
public class Square implements Shape {
private Point topLeft;
private double side;
public double area() {
return side * side;
}
}
public class Rectangle implements Shape {
private Point topLeft;
private double height;
private double width;
public double area() {
return height * width;
}
}
public class Circle implements Shape {
private Point center;
private double radius;
public final double PI = 3.141592653589793;
public double area() {
return PI * radius * radius;
}
}
이렇게 두개는 서로 정반대의 특성을 띄고 각자 맞춰서 잘 사용해야한다고 합니다.
작가의 주장으로는 제일 지양해야할 것은 잡종으로 두개를 섞어쓰는것.
단점이 두배가 되기 때문이라는데..
다만 제 생각에는 잘 섞어쓰면 특수하게 장점만 가져다 쓰는 경우도 있을 수 있을 것 같아 더 공부해봐야할 것 같습니다.