[Clean Code] 객체와 자료 구조

해당 포스트는 Clean Code의 내용을 참고하여 작성되었습니다.

객체 / 자료 비대칭

객체와 자료 구조는 근본적으로 양분된다. 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.

때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다.

디미터의 법칙

객체는 그것이 내부적으로 보유하고 있거나 메세지를 통해 확보한 정보만 가지고 의사 결정을 내려야 한다. 즉 클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야한다.

  1. 클래스 C
  2. f가 생성한 객체
  3. f 인수로 넘어온 객체
  4. C 인스턴스 변수에 저장된 객체

결론

객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기 쉽지만 기존 객체에 새 동작을 추가하기는 어렵다. 자료 구조는 별다른 동작 없이 자료를 노출한다. 그래서 기존 자료 구조에 새 동작을 추가하기는 쉬우나 기존 함수에 새 자료 구조를 추가하기는 어렵다. 어떤 시스템을 구현할 때 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다. 다른 경우로 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/04/Clean%20Code/clean-code6/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.