Published on

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

Authors

노마드코더 북클럽 클린코드 TIL 여섯번째

2022년 5월 3일 TIL

오늘 TIL 3줄 요약

  • 무지성 setter, getter가 아닌 의미있는 함수를 작성하자.
  • 객체와 자료 구조가 뒤섞인 잡종 구조는 피하자.
  • 필요에 따라 객체를 사용할지 자료 구조와 절차적인 코드를 사용할지 선택하자.

오늘 읽은 범위

  • 6장. 객체와 자료 구조

책에서 기억하고 싶은 내용을 써보세요.

  • 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. (p.154)
  • 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. (p.154)
  • 복잡한 시스템을 짜다 보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생긴다. 이때는 클래스의 객체 자향 기법이 가장 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 생긴다. 이때는 절차적인 코드와 자료 구조가 좀 더 적합하다. 분별 있는 프로그래머는 모든 것이 객체라는 생각이 미신임을 잘 안다. 때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다. (p.157)
  • 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다. 양쪽 세상에서 단점만 모아놓은 구조다. 그러므로 잡종 구조는 되도록 피하는 편이 좋다. 프로그래머가 함수나 타입을 보호할지 공개할지 확신하지 못해(더 나쁘게는 무지해) 어중간하게 내놓은 설계에 불과하다. (p.160)
  • 객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체 타이을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다. 자료 구조는 별다른 동작 없이 자료를 노출한다. 그래서 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다. (p.162)
  • 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다. 다른 경우로 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다. 우수한 소프트웨어 개발자는 편견없이 이 사실을 이해해 직면한 문제에 최적인 해결책을 선택한다. (p.163)

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 의미 없는 settergetter를 작성하고 로직을 getter로 데어터나 컴포넌트들을 가져와서 로직을 작성했던 것 같다. 실용주의 프로그래머를 읽을 때는 데메테르 법칙이 잘 와닿지 않았는데, 객체에 대한 내용을 보니 확 와닿는것 같다. 이 규칙을 지킨다면 C++에서 헤더 참조가 여기저기(거의 모든 cpp에..) 얽히는 문제도 개선할 수 있을 것 같다.
  • 시스템을 처음부터 작성할 때, 객체를 활용하는 방향으로 많이 고민했었는데, 그 버릇도 고쳐야 겠다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 직교좌표계
    • 축을 기준(2차원의 경우 x, y)으로 점의 위치를 표현하는 좌표계
  • 극좌표계
    • 기준 점을 기준으로 거리와 각도를 사용해서 위치를 표현하는 좌표계
  • 디미터 법칙 (데메테르 법칙)
    • 실용주의 프로그래머 전자책 기준 212 페이지에 데메테르 법칙으로 설명되어있다.
    • 내용은 본문에 설명된 내용과 크게 다르지 않다. 함수 호출을 줄줄이 엮어서 호출하지 말라는 것.