[개발 도서] Clean Code :: 6장 - 객체와 자료 구조

Jihyoung·2021년 7월 26일
0

Clean Code

목록 보기
1/11
post-thumbnail
post-custom-banner

📕 자료 추상화

💻 6-1

아래 두 코드는 2차원 점을 표현한다.

public class Point {
  public double x;
  public double y;
}

첫번째 코드는 변수를 private로 선언하더라도 값마다 get/set 함수를 제공하기 때문에 구현을 외부로 노출된다. 따라서 추상 인터페이스를 사용할 필요가 있다. 형식 논리에 치우쳐 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다.

public interface Point {
    double getX();
    double getY();
    void setCartesian(double x, double y);
    double getR();
    double getTheta();
    void setPolar(double r, double theta);
}

두번째 코드는 자료 추상화를 통해 구현을 숨긴다. 이처럼 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스라고 할 수 있다.


📗 자료/객체 비대칭

  • 객체 : 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개
  • 자료 구조 : 자료를 그대로 공개하며 별다른 함수는 제공하지 않음

절차적인 코드

  • 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다.
  • 새로운 자료 구조를 추가 하기 어렵다.

객체 지향 코드

  • 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 어렵다.
  • 새로운 함수를 추가하기 어렵다. 이를 위해서는 모든 클래스를 고쳐야 한다.

새로운 자료타입이 필요할 경우 클래스와 객체 지향 방법이 적합
새로운 함수가 필요할 경우 절차적인 코드와 자료구조가 적합


📙 디미터 법칙 -> 잘 이해 못함

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

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

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

하지만 위 객체에서 허용된 메서드가 반환하는 객체의 메서드는 호출하면 안된다.

📍 기차 충돌

아래와 같은 코드를 기차 충돌이라고 한다. 이는 디미터 법칙을 어기는 코드이다.

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

해당 코드는 지양해야 하며 아래와 같이 나누는 편이 좋다.

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

📍 잡종 구조

절반은 객체, 절반은 자료 구조인 것을 의미한다. 객체와 자료 구조의 특성이 모두 있기 때문에 새로운 함수와 새로운 자료 구조를 추가하기 어렵다. 그러므로 되도록 피하는 게 좋다.

📍 구조체 감추기 -> 이해 잘 못해서 정리 못함..


📘 자료 전달 객체

자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스이다. 이러한 자료 구조체를 때로는 자료 전달 객체라고 한다.

  • 데이터베이스와 통신 시 유용
  • 소켓에서 받은 메시지의 구문 분석 시 유용
  • 일반적인 형태로는 'bean' 구조가 있음 : 비공개 변수를 조회/설정 함수로 조작

📍 활성 레코드

  • DTO의 특수한 형태
  • 공개 변수, 비공개 변수에 조회/설정 함수가 있는 자료구조
  • save, find와 같은 탐색 함수 제공
  • 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과

활성 레코드는 자료구조로 취급한다. 비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성한다.


🧩 더 공부할 부분


📚 Reference

  • Clean Code : 애자일 소프트웨어 장인 정신
profile
로그를 생활화
post-custom-banner

0개의 댓글