STUDY/Books

[Clean Code] 6장 객체와 자료 구조

hyunah 2021. 5. 21. 23:59

Clean Code 스터디 내용 정리; 6장 객체와 자료구조

 

이 장에서는 객체와 자료구조의 차이와 특징 그리고 바람직한 구현방법을 소개한다.




객체

  • 추상화 뒤로 자료를 숨긴다. 구현을 외부로 노출하지 않는다.
  • 자료를 다루는 함수만 공개한다.
  • 객체 지향 코드는 새로운 함수를 추가하려면 모든 클래스를 고쳐야 하기 때문에 어렵지만, 기존 함수를 변경하지 않으면서 새 클래스를 추가하기는 쉽다.

 

public interface Point {  
double getX();  
double getY();  
void setCartesian(double x, double y);  
double getR();  
double getTheta();  
void setPolar(double r, double theta);  
}  

 

<객체 지향 코드>

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;
  }
}







자료구조

 

  • 자료를 그대로 공개한다. 구현을 외부로 노출한다.
  • 별다른 함수를 제공하지 않는다.
  • 자료구조를 사용하는 절차적 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기는 쉽지만, 새로운 자료 구조를 추가하려면 모든 함수를 고쳐야 하기 때문에 어렵다.
  • 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는, 자료 전달 객체(DTO)이다. 활성 레코드 또한 DTO의 특수한 형태이므로 자료 구조로 취급해야 한다.

 

public class Point {  
public double x;  
public double y;  
// 변수를 private으로 선언하여도 각 값마다 getter와 setter를 제공하면 구현을 외부로 노출하는 것.  
}  

 

<절차적 코드>

public class Square {
  public Point topLeft;
  public double side;
}

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

public class Geometry {
  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;
    }
  }
}







잡종 구조

  • 절반은 객체, 절반은 자료 구조인 건 잡종 구조에 불과하다.
  • 양쪽의 단점만 모아놓은, 새로운 함수를 추가하기도 어렵고 새로운 자료 구조도 추가하기 어려우므로 되도록 피하는 게 좋다.





새로운 자료 타입을 추가하는 유연성이 필요하다면 동작을 공개하고 자료를 숨기는 객체가 더 적합하고, 새로운 동작을 추가하는 유연성이 필요하면 별다른 동작 없이 자료를 노출하는 자료 구조와 절차적 코드가 더 적합하다. 드러낸 것을 변경하는 것은 어렵다고 기억해두면 좋겠다. 우수한 소프트웨어 개발자는 편견 없이 이 사실을 이해하여 최적의 해결책을 선택한다.

'STUDY > Books' 카테고리의 다른 글

[Clean Code] 8장 경계  (0) 2021.05.24
[Clean Code] 7장 오류 처리  (0) 2021.05.23
[Clean Code] 5장 형식 맞추기  (0) 2021.05.18
[Clean Code] 4장 주석  (0) 2021.05.16
[Clean Code] 3장 : 함수  (0) 2021.05.11