욱 연구소

슬기로운 개발생활

프로그래밍/객체지향

오브젝트:코드로 이해하는 객체지향 설계 Ch.01

wook-lab 2022. 1. 22. 22:31
반응형

Chapter 01 객체, 설계

  • 소프트웨어 유지보수에 대해 중요도가 낮음
  • 소프트웨어 모듈이 가져야 하는 세가지 기능(로버트 마틴)
    • 실행 중에 제대로 동작하는 것
    • 변경을 위해 존재하는 것
    • 코드를 읽는 사람과 의사소통하는 것
  • 변경에 취약한 코드
    • 의존성(dependency): 어떤 객체가 변경될 때, 그 객체에 의존하는 객체도 변경될 수 있음
    • 결합도(coupling)가 높은 코드
      • 결합도가 높다: 의존성이 강하다
      • 결합도가 낮다: 합리적인 수준으로 의존한다
    • 객체지향 설계의 목표: 객체 사이의 결합도를 낮춰 변경이 용이한 설계는 만드는 것
  • 변경에 유연한 코드
    • 자율성을 높이자
      • 캡슐화(encapsulation)
        • 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것을 캡슐화
        • 내부로의 접근을 제한하면 -> 객체와 객체 사이의 결합도를 낮출 수 있음
    • 어떻게?
      • 자기 자신의 문제는 스스로 해결
      • 객체 내부의 상태를 캡슐화하고 객체 간에 오직 메시지를 통해서만 상호작용
      • 응집도를 높임
        • 응집도(cohesion): 밀접하게 연관된 작업만 수행 (연관성 없는 작업은 다른 객체에게 위임)
  • 절차지향과 객체지향
    • 절차적 프로그래밍(Procedural Programming)
      • 프로세스와 데이터를 별도의 모듈에 위치
      • 우리의 예상을 쉽게 벗어남
      • 책임이 한 객체에 집중
      • 변경하기 어려운 코드를 양산
    • 객체지향 프로그래밍(Object-Oriented Programming)
      • 데이터와 프로세스가 동일한 모듈 내부에 위치
      • 동일한 모듈 내부에 위치하기 때문에 예상 범위 안에 있음
      • 개별 객체에 책임 할당
      • 객체 내부의 변경이 객체 외부에 파급되지 않도록 제어할 수 있기 때무에 변경하기 수월함
  • 객체지향의 핵심
    • 적절한 객체에 적절한 책임을 할당하는 것이다.
    • 따라서 객체가 어떤 데이터를 가지느냐보다는 객체에 어떤 책임을 할당할 것이냐에 초점
  • 객체지향의 세계가 우리가 세상을 바라보는 직관과 객체를 완전 일치한다?
    • 비록 현실에서는 수동적인 존재라고 하더라도 일단 객체지향의 세계에 들어오는 모든 것이 능동적이고 자율적인 존재
  • 좋은 설계란?
    • 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계
반응형