[클린 코드 읽고 정리해두고 다시 보기] 객체와 자료 구조

inho ha·2024년 9월 20일
1

자료 추상화

  • 클래스의 변수는 get, set 으로 그대로 노출시키지 마라
  • 세세하게 공개하기보다는 추상적인 개념으로 표현하라
  • 변수 하나하나 get 으로 가져와서 연산하여 사용하지 말고, 클래스에서 연산해서 필요한 값을 리턴해줘라

자료/객체 비대칭

  • 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 새로운 자료 구조를 추가하기는 이를 위해 모든 함수를 고쳐야해서 어렵다.
  • 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 새로운 함수를 추가하기는 이를 위해 모든 클래스를 고쳐야해서 어렵다.

디미터 법칙

  • 클래스의 메서드는 메서드가 생성한 객체, 인수로 넘어온 객체, 클래스, 클래스 인스턴스 변수에 저장된 객체의 메서드만 호출해야 한다.
  • 디미터 법칙 위반 예시 : final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
  • 디미터 법칙 준수 예시 : final String outputDir = ctxt.options.scratchDir.absolutePath;
  • 객체와 달리 자료 구조는 내부 구조를 노출하므로 디미터 법칙이 적용되지 않는다.
  • 객체는 메서드 체이닝을 통해 가져오기 보다, 객체의 메서드로 바로 요구하고, 메서드 내부에서 알아서 원하는 걸 찾아서 리턴하도록 해라

DTO

  • DTO는 자료 구조로 취급하고, 비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성하라.

결론

  • 객체는 동작을 공개하고 자료를 숨긴다.
  • 그래서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉽지만, 기존 객체에 새 동작을 추가하기는 어렵다.
  • 자료 구조는 별다른 동작 없이 자료를 노출한다.
  • 그래서 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다.
  • 상황에 따라 적절하게 사용하는 것이 중요하다.
profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글