• 변수를 private으로 하는 이유는남들이 변수에 의존하게 하고싶지 않기 떄문이다.
  1. 자료 추상화

    • 추상 인터페이스를 사용해 사용자가 구현을 모른채 자료의 핵심을 구현할수 있어야
    • 진정한 클래스다.
    • 자료를 세세하게 공개하기 보다는 추상적인 개념으로 표현하는 것이 좋다.
    • 인터페이스나 조회 설정 함수만으로는 추상화가 이뤄지지 않는다.
    • 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다.
    • 아무 생각없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
  2. 자료/객체 비대칭

    • 객체는 추상화 뒤로 자료를 숨긴채 자료를 다루는 함수만 공개한다.
    • 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.
    • 객체지향 코드에서는 어려운 변경은 절차적인 코드에서 쉽고
    • 절차적인 코드에서 어려운 변경은 객체지향 코드에서 어렵다.
    • ( 나는 아직 까지 절차지향에서 벗어나지 못하고 있었다. )
  3. 디미터 법칙

    • 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙

    • 위에서 봣듯이 객체는 자료를 숨기고 함수를 공개한다.

    • 객체는 조회 함수로 내부 구조를 공개하면 안된다는 의미다.

    • 디미터 법칙은 클래스C의 메서드f는 다음과 같은 객체의 메서드만 호출해야 한다고 주장한다.

      • 클래스 C
      • f가 생성한 객체
      • f 인수로 넘어온 객체
      • C인스턴스 변수에 저장된 객체
    • 디미터 법칙은 메소드 체이닝을 사용하지 말라고한다.

    • 기차 충돌

      • 메소드체이닝을 기차충돌이라고 부른다고 한다.
      • 객체가 한줄로
    • 잡종 구조

      • 절반은 객체 절반은 자료 구조인 잡종 구조
      • 되도록 피하는 것이 좋다.
    • 구조체 감추기

      • 객체에게 뭔가를 시켜야지 객체의 내부구조를 보이게 해선 안된다.
      • ( 어렵다 )
    • 자료 전달 객체

      • DTO 라고도 한다.

      • bean 구조 이며 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 처음으로 사용되는 구조체다.

      • DTO의 private 변수를 조회 설정 함수로 조작한다는 것을 작가 할아버지는 사이비 캡슐화로 보고있으며 별다른 이익을 제공하지 않는다고 한다.

      • ( 난 여태까지 이렇게 해왔었는데 잘못된 것이였는가 ? )

      • 활성 레코드

        • DTO와 같으며 대개 save와 find 같은 탐색함수도 제공한다.
        • 활성 레코드는 데이터베이스 테이블이나 다른소스에서 자료를 직접 변환한 결과다.
        • 활성레코드는 자료 구조로 취급한다.

      결론

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

'book > 클린코드' 카테고리의 다른 글

8장 - 경계  (0) 2020.11.30
7장 - 오류처리  (0) 2020.11.27
5장 - 형식 맞추기  (0) 2020.11.23
4장 - 주석  (0) 2020.11.22
3장 - 함수  (0) 2020.11.19

+ Recent posts