본문 바로가기
책정리/방법론

클린코드 - 6장 객체와 자료구조

by 난파선 2017. 1. 12.


6장 객체와 자료구조

변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다. 어째서 수많은 프로그래머가 조회함수와 설정함수를 당연하게 공개해 비공개 변수를 외부에 노출할까?
  1. 자료 추상화
    • 변수를 pirvate으로 선언하더라도 각 값마다 조회(get)함수와 설정(set)함수를 제공한다면 구현을 외부로 노출하는 셈이다.
    • 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다.
    • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
    • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.
    • 인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는 다.
    • 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
  2. 자료/객체 비대칭
    • 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.
    • 자료 구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않는 다.
    • 자료 구조를 사용하는 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.
    • 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.
    • 복잡한 시스템을 짜다 보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생긴다. 이 때는 클래스와 객체 지향 기법이 가장 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 생긴다. 이 때는 절차적인 코드와 자료 구조가 적합낟.
    • 때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다.
  3. 디미터 법칙
    • 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.
    • 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미다. 그러면 내부 구조를 노출하는 셈이니까
    • 기차 충돌
      • abc().bcd().cde(); 옆에 코드를 기차 충돌이라 부른다. 여러 객체가 한줄로 이어진 기차처럼 보이기 때문이다. 일반적으로 조잡하다 여겨지는 방식이르모 피하는 편이 좋다.
    • 잡종 구조
      • 절반은 객체, 절반은 자료 구조
      • 잡종 구조는 중요한 기능을 수행하는 함수도 있고 공개 변수나 공개 조회/설정 함수도 있다.
      • 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다.
      • 양쪽 세상에서 단점만 모아 놓은 구조다.
  4. 자료 전달 객체(Data Transfer Object DTO)
    • 공개 변수만 있고 함수가 없는 클래스다
    • 활성 레코드
      • 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조지만 대개 save나 find와 같은 탐색 함수도 제공한다.
      • 활성 레코드에 비즈니스 규칙 메서드를 추가해 이런 자료 구조를 객체로 취급하는 개발자가 흔다다. 하지만 이는 바람직하지 않다. 그러면 자료 구조도 아니고 객체도 아닌 잡종 구조가 나오기 때문이다.


'책정리 > 방법론' 카테고리의 다른 글

클린코드 - 5장 형식 맞추기  (0) 2017.01.11
클린코드 - 4장 주석  (0) 2017.01.10
클린코드 - 3장 함수  (0) 2017.01.10
클린코드 - 2장 의미있는 이름  (0) 2017.01.10

댓글