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

yesjm·2024년 4월 21일
0

클린코드를 읽자

목록 보기
6/13

자료 추상화

  • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
  • 인터페이스나 조회/설정 함수만으로는 추상화가 이루어지지 않는다.
  • 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 고민해야 한다.

자료/객체 비대칭

  • 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다.
    분별 있는 프로그래머는 모든 것이 객체라는 생각이 미신임을 안다. 때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다.

디미터 법칙

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

기차 충돌

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
  • 위와 같은 코드를 여러 객차가 한줄로 이어진 기차처럼 보이기 떄문에 기차 충돌이라 부른다.
  • 다음과 같이 구현했다면 디미터 법칙을 거론할 필요가 없다.
final String outputDir = ctxt.options.scratchDir.absolutePath;

잡종 구조

  • 절반은 객체, 절반은 자료 구조인 잡족 구조
  • 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다. 양쪽의 단점만 모아놓은 구조로 되도록이면 피하는 편이 좋다.

자료 전달 객체

  • 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조체를 때로느느 자료 전달 객체(Data Transfer Object, DTO)라 한다.
  • DTO는 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 처음으로 사용하는 구조체다.

활성 레코드

  • 활성 레코드는 DTO의 특수한 형태다.
    공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조지만, 대개 save나 find와 같은 탐색 함수도 제공한다.
    활성 레코드는 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과다.
  • 활성 레코드에 비즈니스 규칙 메서드를 추가해 자료 구조를 객체로 취급하는 개발자가 흔하다. 그러면 자료 구조도 아니고 객체도 아닌 잡종 구조가 나온다.
  • 해결책: 활성 레코드는 자료 구조로 취급한다. 비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성한다.
profile
yesjm's second brain

0개의 댓글

Powered by GraphCDN, the GraphQL CDN