[6장] 객체와 자료 구조

DAYEON·2021년 7월 17일
0

Clean Code

목록 보기
7/17
post-thumbnail

자료 추상화

  • 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다. → 추상화 필요한 이유
  • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스
  • 자료를 세세하게 공개하기보다 추상적인 개념으로 표현하는 것이 좋다.
public interface Vehicle{
	double getPercentFuelRemaining();
}

자료/객체 비대칭

  • 객체와 자료 구조는 근본적으로 양분된다.
  • 객체 지향 코드와 절차 지향 코드는 상호 보완적인 특징이 있다.
  • 새로운 자료 타입이 필요할 때 → 객체 지향 코드 사용
  • 새로운 함수가 필요할 때 → 절차 지향 코드 사용

디미터 법칙

  • 디미터 법칙은 잘 알려진 휴리스틱이다.
  • 디미터 법칙이란 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.
  • 클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 하며, 다음과 같은 객체에서 허용된 메서드가 반환하는 메서드는 호출하면 안된다.
    1) 클래스 C
    2) f가 생성한 객체
    3) f인수로 넘어온 객체
    4) C인스턴스 변수에 저장된 객체

🔎 휴리스틱 : 간편 추론의 방법으로, 체계적이면서 합리적인 판단이 굳이 필요하지 않은 상황에서 사람들이 빠르게 사용할 수 있게 구성된 것 이다.

1) 기차 충돌

  • ❌ : 일반적으로 조잡하다 여겨지는 방식
  • 여러 객체가 한 줄로 이어진 기차처럼 보이는 코드.
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = ctxt.options.scratchDir.absolutePath;

2) 구조체 감추기

  • 만약 ctxt, scratchDir 객체가 진짜라면 앞 코드처럼 줄줄이 엮어서는 X
  • 디렉터리의 경로를 코드로 작성할 때 점, 슬래시, 파일 확장자, File 객체를 부주의하게 뒤섞어서는 X↓ 💊❗️ ctxt 객체에 임시 파일을 생성하라고 시키는 것!

자료 전달 객체

  • 자료 구조체의 전형적인 형태 : 공개 변수만 있고 함수가 없는 클래스, 이를 때로는 DTO 라고 한다.
  • 저자가 말하는 DTO는
    • 데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용
    • 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 단계에서 가장 처음으로 사용하는 구조체
    • 일반적인 형태는 bean(빈) 구조 ☞빈은 비공개 변수를 조회/설정 함수로 조작한다. 저자는 비추하는 듯 하다.

🔎 DTO(자료 전달 객체, 데이터 전송 객체) : 프로세스 간에 데이터를 전달하는 객체

1. 활성 레코드

  • DTO의 특수한 형태 ☞추가적으로 대게 save나 find와 같은 탐색 함수도 제공
  • 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과
  • 하지만, 활성 레코드에 비즈니스 규칙을 추가해 객체로 취급하는 것은 끔찍한 잡종 구조가 나오는 것이므로 옳지 않다.↓ 💊❗️ 활성 레코드는 자료 구조로 취급하자! 비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성하기!

🔎 추가적으로 - 기본적으로는 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조

결론

  • 객체는 동작을 공개하고 자료를 숨김 → 변경 없이 객체 타입 추가는 쉬움
  • 자료 구조는 별 다른 동작 없이 자료를 노출 → 새 자료 구조 추가는 어려움
  • 어떤 유연성이 필요한가에 따라 최적의 해결책을 선택하라!

인상 깊었던...

개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.

우수한 소프트웨어 개발자는 편견 없이 이 사실(절차적 코드와 객체의 특징)을 이해해 직면한 문제에 최적인 해결책을 선택한다.


profile
노력하는 초보 개발자

0개의 댓글