[클린 코드] TIL(Today I Learned) DAY 10

soleil_lucy·2024년 2월 4일
0

TIL (2024.02.04)

DAY 10

  • 오늘 읽은 범위: 6장 객체와 자료 구조

Summary

  • 객체는 동작을 공개하고 자료를 숨긴다
  • 자료 구조는 별다른 동작 없이 자료를 노출한다
  • 새로운 자료 타입을 추가하는 유연성이 필요한 경우에는 객체를 사용하고, 새로운 동작을 추가하는 유연성이 필요한 경우에는 자료 구조절차적인 코드를 사용해라

책에서 기억하고 싶은 내용

6장 객체와 자료 구조

  • 변수를 비공개(private)으로 정의하는 이유?
    • 남들이 변수에 의존하지 않게 만들고 싶어서
    • 변수 타입이나 구현을 맘대로 바꾸고 싶어서

자료 추상화 (p.118)

  • 진정한 의미의 클래스?
    • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 함
  • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다

자료/객체 비대칭 (p.119)

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

디미터 법칙 (p.123)

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

기차 충돌 (p.123)

  • 예시 코드
    final String outDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
  • 기차 충돌?
    • 위 예시 코드처럼 여러 객차가 한 줄로 이어진 기차처럼 보이는 코드를 의미함
    • 피하는 편이 좋다

잡종 구조 (p.124)

  • 잡종 구조?
    • 절반은 객체, 절반은 자료 구조인 형태
    • 중요한 기능을 수행하는 함수도 있고, 공개 변수나 공개 조회/설정 함수도 있다
      • 공개 조회/설정 함수는 비공개 변수를 그대로 노출한다
    • 새로운 함수, 새로운 자료 구조도 추가하기 어려워 객체와 자료 구조의 단점만 모아놓은 구조
    • 되도록 피하라...

구조체 감추기 (p.125)

  • 객체?
    • 객체라면 내부 구조를 감춰야 한다
    • 객체라면 뭔가를 하라고 말해야지 속을 드러내라고 말하면 안 된다

자료 전달 객체 (p.126)

  • 자료 구조체?
    • 공개 변수만 있고 함수가 없는 클래스
    • 자료 전달 객체, Data Transfer Object, DTO
      • 데이터베이스와 통신하거나 소켓에서 받은 메시지와 구문을 분석할 때 유용
      • 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 처음으로 사용하는 구조체

활성 레코드 (p.127)

  • 활성 레코드?
    • DTO의 특수한 형태
    • 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조
    • save나 find와 같은 탐색 함수도 제공
    • 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과
    • 자료 구조로 취급!

결론 (p.127)

  • 객체?
    • 동작을 공개하고 자료를 숨긴다
      -> 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기 쉬움
      -> 기존 객체에 새 동작을 추가하기는 어려움
    • 사용하기에 적합한 경우?
      • 새로운 자료 타입을 추가하는 유연성이 필요한 경우
  • 자료 구조?
    • 별다른 동작 없이 자료를 노출한다
      -> 기존 자료 구조에 새 동작을 추가하기 쉬움
      -> 기존 함수에 새 자료 구조를 추가하기는 어려움
    • 사용하기에 적합한 경우?
      • 새로운 동작을 추가하는 유연성이 필요한 경우

오늘 읽은 소감

자바 언어로 설명된 예시들이어서 주로 사용하는 언어인 JavaScript에서는 어떻게 써먹어야 할지 감이 잡히지 않는 것 같다. 이해를 돕기 위해 clean-code-javascript-ko 깃허브 레파지토리를 참고해서 JavaScript에서는 책에서 말한 것들을 어떻게 사용하면 좋을지 조금은 이해할 수 있었다. 나중에 프로젝트를 해보면 더 이해가 와닿지 않을까?
- getter와 setter를 사용하세요
- 객체에 비공개 멤버를 만드세요(클로저 이용, ES6에서는 클래스를 이용해도 되지 않을까?)

profile
여행과 책을 좋아하는 개발자입니다.

0개의 댓글