스터디/클린코드(Clean Code)

[스터디] 클린코드 6장 (2022년 6월 29일)

눙엉 2022. 6. 29. 22:15

6장의 제목은 객체와 자료 구조이다.

 

제목부터 어렵다... 확실히 자바를 공부하지 상태에서 읽으니 모르겠다...

 

요약정리만 간단히 했다.

자료 추상화

추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.

자료를 세세하게 공개하는 것보다 추상적인 개념으로 표현하는 편이 좋다.

구현을 모른 채 자료를 조작하는 것이 진정한 의미의 클래스이다.

 

자료/객체 비대칭

객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.

자료 구조는 자료를 그대로 공개하면서 별다른 함수를 제공하지 않는다.

다형성이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것

객체와 자료 구조는 근본적으로 양분된다.

 

디미터 법칙

디미터 법칙은 잘 알려진 휴리스틱이다.

 

휴리스틱

불충분한 시간이나 정보로 인하여 합리적인 판단을 할 수 없거나, 체계적이면서 합리적인 판단이 굳이 필요하지 않은 상황에서 사람들이 빠르게 사용할 수 있게 보다 용이하게 구성된 간편 추론의 방법

 

객체는 자료를 숨기고 함수를 공개한다. 즉 객체는 조회 함수로 내부 구조를 공개하면 안된다.

클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다.

  • 클래스 C
  • f가 생성한 객체
  • f 인수로 넘어온 객체
  • C 인스턴스 변수에 저장된 객체

 

기차 충돌

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

일반적으로 조잡하다 여겨지는 방식이므로 피하는 편이 좋다.

Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

 

자료 전달 객체(DTO)

전형적인 자료 전달 객체는 공개 변수만 있고 함수가 없는 클래스다.

DB와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용하다.

 

활성 레코드

DTO의 특수한 형태

공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조

save, find 같은 탐색 함수도 제공한다.

DB 테이블이나 다른 소스에서 자료를 직접 변환한 결과다.

비즈니스 규칙 메서드를 추가하지 말아라

 

결론

객체는 동작을 공개하고 자료를 숨긴다.

자료구조는 별다른 동작 없이 자료를 노출한다.

객체는 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기 쉽다.

자료 구조는 기존 자료 구조에 새 동작을 추가하기 쉽다.