ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클린코드 - 객체와 자료구조
    개발/프로그래밍 2020. 10. 6. 17:05

    자료를 세세하게 공유하기보다 추상적인 개념으로 표현하는게 좋다.

    아무생각없이 get set 함수를 만드는것은 추상화를 이루지않는다.

     

    객체는 자료를 숨기고

    자료를 다루는 함수만 공개한다.

     

    자료구조는 자료를 공개하고

    함수가 없다.

     

     

    class Square {
      Point topLeft;
      double side;
    }
    
    class Rectangle {
      Point topLeft;
      double height;
      double width;
    }
    
    class Geometry {
      final double pi = 3.14;
    
      double area(dynamic shape) {
        if (shape is Square) {
          Square s = shape;
          return s.side * s.side;
        } else if (shape is Rectangle) {
          Rectangle r = shape;
          return r.height * r.width;
        }
      }
    }
    

    위 클래스는 자료구조를 사용한 절차적인 클래스이다.

    만약 area 가아닌 다른 함수, 예로 둘레를 구하는 새로운 함수를 구현할때

    Square 라는 클래스(자료구조)는 영향받지 않는다.

    즉 새로운 함수를 구현할때마다 자료 구조를 변경하지 않는다.

     

    하지만 새로운 자료구조 (도형 타입) 이 나오면 Geometry 의 함수들을 다 고쳐야한다.

    만약 앞으로 구현해야할 시스템에 삼각형, 원, 오각형 등등... 이런식으로 필요하다면 이렇게 구현하면 안된다.

    더 이상의 자료구조가 필요없고  도형의 길이, 반지름, 변의갯수 둘레 등등... 이런식으로 새함수가 필요하다면

    이렇게 구현하는게 좋다.

     

     

    class Square implements Shape {
      Point topLeft;
      double side;
    
      @override
      double area() {
        return side * side; 
      }
    }
    
    class Rectangle implements Shape {
      Point topLeft;
      double height;
      double width;
    
      @override
      double area() {
        return height * width;
      }
    }
    

    위 클래스는 객체지향적이다. 새 도형 (자료구조) 을 추가해도 기존 함수들을 영향을 받지않는다.

    하지만 area가 아닌 다른 새로운 함수를(Shape에서) 추가하려면 각 도형마다 다 수정해줘야한다.

    계속해서 새로운 자료구조가 필요한경우 이방법을 쓰는게좋다.

     

     

    정리하여

    함수보다 새로운 자료구조가 필요한 경우 객체지향 방법을 사용

    새로운 함수가 필요한경우 자료구조와 절차적인 코드가 더 적합하다.

     

     

     

    댓글

Designed by Tistory.