Clean Code #6

안성은·2022년 3월 1일
0

Clean Code

목록 보기
7/10

6장. 객체와 자료구조


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

  • 어째서 수많은 프로그래머가 Get 함수와 Set 함수를 당연하게 공개해 비공개 변수를 외부에 노출할까?
    -> 내부 자료구조를 공개하지 않는 것이 객체지향의 장점인데 함수명에 다 나와있다!!
  • 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
  • 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
  • 객체와 자료 구조는 근본적으로 양분된다, 객체 지향 코드에서는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽고 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다.
  • 디미터의 법칙이란 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다.
    -> 이전에 코드 리뷰를 받을 때 디미터의 법칙을 지적받은 적이 있다. 단순히 한 줄에 모든 정보를 가지고 올 수 있어서 좋다고 생각했지만 크나큰 오산이었다. 객체는 다른 객체의 속사정을 몰라야 한다.
  • 자료 구조는 무조건 함수 없이 공개 변수만 포함하고 객체는 비공개 변수와 공개 함수를 포함한다면, 문제는 훨씬 간단하리라.
  • DTO는 데이터 베이스에서 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 흐름에서 처음으로 사용하는 구조이다.
  • Bean은 비공개 변수를 조회/설정 함수로 조작하며 일종의 사이비 캡슐화로 별다른 이익을 제공하지 않는다.
  • 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 적절하고 새로운 동작이 필요하면 자료 구조와 절차적인 코드가 적합하다.
    -> 직면한 문제에 최적인 해결책을 선택한다.

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

스프링으로 프로젝트를 진행하고 나서 스프링을 잘 안다고 생각했던 나를 반성하게 된다. 기존 템플릿을 이용해서 개발을 했고 왜 그런 템플릿이 만들어졌는지, 효율적인지를 깊게 고민해본적이 없는 것 같다. 가장 놀라웠던 건 Bean이 큰 이익을 제공하는 것이 아니라는 점이다. 효율적이여서 사용하기 보다는 대중이여서 사용한다고 생각이 되었다. 또한, 실제로 코드 리뷰를 하면서 디미터의 법칙을 지적 받은 적이 있었고 클린 코드를 먼저 읽었다면 그런 실수를 하지 않았을 텐데라는 아쉬움을 남는다. 이제는 디미터의 법칙을 잘 지키면서 개발을 해야겠다.

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

  • 디미터의 법칙 (지식 보완)
  • 활성 레코드
  • 잡종 구조

세줄 요약

  • 객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면 새 객체를 추가하기는 쉽지만 기존 객체에 새 동작을 추가하기는 어렵다.
  • 자료 구조는 별다른 동작 없이 자료를 노출한다. 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다.
  • 우수한 개발자는 편견없이 이 사실을 근거로 최적의 해결책을 선택한다.

0개의 댓글