[Clean Code] Chapter 6: Objects and Data Structures

DAY6 : Chapter6 Objects and Data Structures

오늘읽은 범위: ~ 6장. 객체와 자료구조

  • 객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체타입을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다.
  • 자료구조는 별다른 동작없이 자료를노출한다. 그래서 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료구조를 추가하기는 어렵다.

책에서 기억하고 싶은 내용

새로운 자료타입을 추가하는 유연성이 필요하면 객체가 더 적합하고, 새로운 동작을 추가하는 유연성이 필요하면 자료구조와 절차적인 코드가 더 적합하다

  • 자료 추상화 Data Abstraction
    • Abstraction means hiding implementation.
  • 자료/객체 비대칭성Data/Object Anti-Symmetry
    • Objects: hide their data (be private) and have functions to operate on that data.
    • Data Structures: show their data (be public) and have no functions.

    • Procedural code (code using data structures)
      • Makes it easy to add new functions without changing the existing data structures.
      • Makes it hard to add new data structures because all the functions must change.
    • OO code (code using object oriented)
      • Makes it hard to add new functions because all the existing classes must change.
      • Makes it easy to add new classes without changing existing functions.
    • So, the things that are hard for OO are easy for Procedural, and vice-versa.
    • Q: when OO code is more appropriate?
      • A. In any complex system, because we will having to add more data types rather than new functions.
    • Q: when procedural code is more appropriate?
      • A. on the other hand, when we’ll want to add new functions more rather than data types.
  • 디미터 법칙 The Law of Demeter
    • 다른 객체가 어떠한 자료를 갖고 있는지 속사정을 몰라야 한다는 것을 의미
    • 자료구조라면 디미터 법칙을 거론할 필요가 없다.
      • 객체라면 내부 구조를 숨겨야 하므로 디미터 법칙을 지켜야 한다. 하지만 자료구조라면 당연히 내부 구조를 노출해야 하므로 디미터 법칙이 적용되지 않는다.
      //---DON'T
      public void showData(Car car) {
          print(car.getOwner().getId().getLicenseInfo());
      }
      //---DO
      Owner owner = car.getOwner();
      Address ownerId = owner.getId();
      Street ownerStreet = ownerId.getLicenseInfo();
    
  • DTO
    • 변수만 가지고 별다른 함수가 없는 형태의 객체를 자료 전달 객체(DTO)라고 한다. 사용자에게 받은 메시지나 레이어 간에 데이터를 전달하기 위해 사용한다.
    • This is a form of a data structure which is a class with public variables and no functions and sometimes called DTO. DTOs are very useful structures, especially when communicating with databases or parsing messages from sockets and so on.
    • And there is another more common form called the “bean” form. Beans have private variables manipulated by getters and setters. As the following

소감

  • get__()->get__() 꼬리물기 식의 코드 구현을 앞으로는 주의하도록 해야겠다.

궁금한 점

  • 휴리스틱 heuristic (직관적인,경험적인,대충 어림짐작하기,눈대중으로 맞추기, 즉흥적으로 맞추기, 주먹구구식으로 맞추기)
    • A heuristic, or heuristic technique, is any approach to problem solving or self-discovery that employs a practical method that is not guaranteed to be optimal, perfect, or rational, but is nevertheless sufficient for reaching an immediate, short-term goal or approximation.

#노마드코더
#북클럽
#노개북