프로그래밍

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

Victory_HA 2023. 10. 15. 17:29

6장 객체와 자료 구조

자료 추상화

  • 인터페이스는 자료구조를 명백하게 표현한다.
  • 변수를 private으로 선언하더라도 조회함수(get), 설정함수(set)을 제공한다면 구현을 외부로 노출시키는 셈이다.
  • 구현을 감추려면 추상화가 필요하다.
  • 추상 인터페이스를 제공해 사용자가 구현을 몰른 채 자료를 조작할 수 있어야, 진정한 의미의 클래스이다.

자료/객체 비대칭

  • 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다.
  • 자료구조는 자료를 그대로 공개하고, 함수는 다루지 않는다.
  • 새로운 자료 타입이 필요한 경우, 클래스와 객체 지향 기법이 적합하다.
  • 새로운 함수가 필요한 경우, 절차적인 코드와 자료 구조가 적합하다.

디미터 법칙

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

    기차 충돌 (train wreck)

  • 아래와 같은 코드를 기차충돌이라고 부른다.
  • 한 줄에 여러개의 함수를 사용하면, 조잡해보일 수 있다.
    // Bad
    String outputpath = ctxt.getOptions().getScratchDir().getAbsolutePath();
  • 여러개의 함수는 나누는 편이 좋다.
    // Good
    Options opts = ctxt.getOptions();
    File scratchDir = opts.getScratchDir();
    String outputDir = scratchDir.getAbsolutePath();

잡종 구조

  • 잡종 구조란 객체와 자료 구조가 섞인 코드
  • 잡종 구조는 피하는 편이 좋다.

자료 전달 객체 (Data Transfer Object, DTO)

  • 자료 구조체는 public 변수만 있고, 함수는 없는 클래스이다.
  • 흔히 DB에 저장된 정보를 코드에서 사용할 객체로 변환하는 과정에서 가장 처음 사용하는 구조체이다.

활성 레코드

  • 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료구조 + save, find 같은 탐색 함수도 제공한다.
  • 활성 레코드는 자료 구조로 취급한다.

정리

  • 새로운 자료 타입을 추가하는 경우 객체가 적합하다.
  • 새로운 동작을 추가하는 경우 자료 구조와 절차적 코드가 적합하다.

'프로그래밍' 카테고리의 다른 글

[클린코드] 6,7장 정리  (1) 2023.10.18
[클린코드] 7장 오류 처리  (0) 2023.10.15
Architecture Decision Record (ADR)이란?  (0) 2023.05.27
유스케이스 (Usecase)  (0) 2023.04.26
VisualStudio Copilot 설치하기  (0) 2023.03.30