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

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



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

자료 추상화

  • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 것이 좋다.
  • 인터페이스나 조회/설정 함수만으로 추상화가 이뤄지지 않는다.
  • 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.

자료/객체 비대칭

  • 복잡한 시스템을 짜다보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생긴다. 이 때는 클래스와 객체 지향 기법이 가장 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 생긴다. 이 때는 절차적인 코드와 자료 구조가 좀 더 적합하다.

디미터 법칙

  • 객체는 자료를 숨기고 함수를 공개한다.
  • 기차 충돌

    final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
    • 여러 객체가 한 줄로 이어진 기차처럼 보이는 방식
    • 일반적으로 조잡하다 여겨지는 방식이므로 방식이므로 피하는 편이 좋다. 위 코드는 아래와 같이 나누는 편이 좋다.
    Options opts = ctxt.getOptions();
    File scratchDir = opts.getScratchDir();
    final String outputDir = scratchDir.getAbsolutePath();
  • 잡종 구조

    • 절반은 객체, 절반은 자료 구조인 잡종 구조가 나온다.
    • 중요한 기능을 수행하는 함수도 있고, 공개 변수나 공개 조회/설정 함수도 있다.
    • 공개 조회/설정 함수는 비공개 변수를 그대로 노출한다.
  • 구조체 감추기

자료 전달 객체 (DTO)

  • 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다.
  • 데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용하다.
  • 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 처음으로 사용하는 구조체다.
  • 활성 레코드

    • DTO 의 특수한 형태다.
    • 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조지만, 대개 save 나 find 와 같은 탐색 함수도 제공한다.

결론

  • 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다.
  • 다른 경우로 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다.

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

Javascript 를 주로 사용하고 함수형 프로그래밍을 좋아하는데 이번 6장은 객체지향에 집중된 글이어서 가볍게 본 것 같다. 아무래도 함수형 프로그래밍을 좋아한다고 해도 하나에 매몰되지 않고 넓은 인사이트를 가지고 있어야 뭐가 좋고 나쁜건지 구분할 수 있다는 생각을 하고 보니 더 재밌게 본 것 같다.


🔥 소감 3줄 요약

  • 예전에 자료 전달 객체를 사용했을 때는 생각없이 데이터베이스와 통신할 때 사용했었는데 책에서 나와서 반갑기도 하고 다시 공부할 수 있어서 좋았다.
  • 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다는 것을 명심하자.
  • 객체는 동작을 공개하고 자료를 숨긴다!

Written by@sujin-park
항상 배우는 자세 갖추기 💻

GitHubLinkedIn