Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 6장. 객체와 자료구조
#clean_code
2년 전
756


TIL (Today I Learned)

2022.03.02

오늘 읽은 범위

6장. 객체와 자료구조

책에서 기억하고 싶은 내용을 써보세요.

자료 추상화
  • 무엇을 공개하고 무엇을 공개하지 않을까?

자료/객체 비대칭

(자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다

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

    • 클래스 C

    • f가 생성한 객체

    • f 인수로 넘어온 객체

    • C 인스턴스 변수에 저장된 객체

// 한 줄로 세우면 기차충돌이라 분리했음에도...
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

// 자료 구조일 때 이렇게하면 더 좋았을 것
final String outputDir = ctxt.options.scratchDir.absolutePath;
  • 디미터 법칙을 위반하는지 여부는 ctxt, Options, ScratchDir이 객체인지 아니면 자료 구조인지에 달렸다.

  • if 표준(빈,bean)의 존재 ⇒ 단순한 자료구조에도 조회함수와 설정함수를 설정하라

잡종 구조
  • 절반 객체, 절반 절차

구조체 감추기
  • 자료구조가 아니라면 숨겨야한다

// 썩 내키지 않음
ctxt.getAbsolutePathOfScratchDirectoryOption();

// 코드를 살펴 본 후 새로이...
BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);
자료전달객체
  • ==자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스 (DTO)

  • 데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석

    • 빈 구조 ⇒ private 으로 데이터 선언, 조회생성자를 별도로 둠 ⇒ 별로 이점이 없음.

활성 레코드
  • 자료구조로 취급하라

결론
  • 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합

  • 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 어찌보면 나의 코드 습관은 순수 OO 주의자에 가까웠다. 조금 유연하게 표준을 정하는 것이 좋을 것 같다.

  • 디미터 법칙을 잘 지킨다고 생각했음에도 불구하고 활성레코드를 잡종으로 만들어 버리는 일은 흔했던 것 같다. 유의하자.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.