Objects 책 정리

Tags:

객체지향

  • 클래스가 아니라 객체를 바라보는 것
  • 객체는 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 존재
  • 객체에게 적절한 역할과 책임을 부여하는 방법 필요
  • 유연하면서도 요구사항에 적절한 협력을 설계하는 방법을 알아야함
  • 설계와 품질 사이의 다양한 측면에 관해 고민해야함

클린 소프트웨어 (로버트 마틴)

소프트웨어 모듈의 세가지 목적

1. 실행 중에 제대로 동작해야함

  • 모듈의 존재 이유

2. 변경을 위해 존재

  • 간단한 작업만으로 변경이 가능해야함
  • 변경하기 어려운 모듈은 제대로 동작하더라도 개선해야함

3. 코드를 읽는 사람과 의사소통

  • 특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야함

이해 가능한 코드: 우리의 예상에서 크게 벗어나지 않는 코드

캡슐화의 목적

  • 변경하기 쉬운 객체로 만드는 것
  • 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것
  • 캡슐화를 통해 객체 내부로의 접근을 제한하여 결합도를 낮춤

캡슐화와 응집도

  • 객체 내부의 상태를 캡슐화
  • 객체 간에 오직 메시지를 통해서만 상호작용
  • 메시지를 보내면 응답할 것이라는 약속만 정의되어 있음(원하는 결과를 반환할 것이라는 사실)
  • 다른 객체의 내부 상황을 몰라도 됨

응집도

  • 밀접하게 연관된 작업만을 수행하고
  • 연관성 없는 작업은 다른 객체에게 위임하는 객체를 가리켜 응집도가 높다고 말한다.
  • 자신의 데이터는 스스로 처리하도록 자율적인 객체를 만들기 = 낮은 결합도 & 높은 응집성
  • 객체의 응집도를 높이기 위해서는 자신의 데이터를 스스로 책임지고 처리
  • 메시지를 통해서만 상호작용