결국엔 프로그래밍

[OBJECT] 오브젝트 Chapter 1 - 객체, 설계 본문

객체지향프로그래밍/[책] Object 오브젝트

[OBJECT] 오브젝트 Chapter 1 - 객체, 설계

준석입니다 2022. 1. 2. 13:21

패러다임

현대의 패러다임이란, 한 시대 혹은 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계
이 책에서 패러다임의 전환이란, 절차형 패러다임에서 객체지향 패러다임으로의 변화를 의미

프로그래밍 패러다임

  • 개발자 공동체가 동일한 프로그래밍 스타일과 모델을 공유할 수 있게 하고, 불필요한 부분에 대한 의견 충돌을 방지함
  • 프로그래밍 패러다임을 교육시킴으로써 동일한 규칙과 방법을 공유하는 개발자로 성장할 수 있도록 준비시킴
모듈은
1) 실행이 가능해야 하고
2) 변경에 용이해야 하며
3) 코드를 통해 의사소통이 가능해야 한다

설계의 목표

설계의 목표는 결합도를 낮춰 변경이 용이한 설계를 만드는 것이다.
캡슐화를 통해 객체 내부로의 접근을 제한, 객체와 객체 사이의 결합도를 낮출 수 있고 설계를 좀 더 쉽게 변경할 수 있다.

결론

직관적으로 생각하는 방향과 코드의 실행 방향이 일치할 때 코드를 읽는 사람과의 의사소통이 원활하다.
객체의 자율성을 높이는 방향으로 설계를 개선 (결합도를 낮추기 위해 모듈의 자율성을 키움)

자율적인 객체 → 결합도 낮춤 → 응집도 높임
객체 내부의 상태를 캡슐화하고, 객체 간 오직 메시지를 통해서만 상호작용

p.25 캡슐화와 응집도까지


절차 지향과 객체지향

프로세스와 데이터를 별도의 모듈에 위치시키는 방식을 절차적 프로그래밍이라 부른다.
데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식객체지향 프로그래밍이라 부른다.
객체지향 코드는 자신의 문제를 스스로 처리해야 한다는 우리의 예상을 만족시켜주기 때문에 이해하기 쉽고, 객체 내부의 변경이 객체 외부에 파급되지 않도록 제어할 수 있기 때문에 변경하기 수월하다.

책임의 이동

책임의 이동: 여러 객체에 책임이 분산되는 것 (자신 스스로를 책임짐)
객체지향 설계의 핵심은 적절한 객체에 적절한 책임을 할당하는 것이다. 그렇게 되면 이해하기 쉬운 구조와 읽기 쉬운 코드를 얻을 수 있다.
결과적으로 불필요한 세부사항을 객체 내부로 캡슐화하는 것은 객체의 자율성을 높이고 응집도 높은 객체들의 공동체를 만든다. 그렇게 하여 최소한의 의존성만 남기는 것이 훌륭한 객체지향 설계이다.

더 개선할 수 있다

(예제 코드를 바탕으로)
1. Bag을 자율적인 객체로 만든다.
   Bag 내부에 접근하는 모든 로직을 Bag 안으로 캡슐화해서 결합도를 낮춘다.
2. Audience가 Bag의 인터페이스에만 의존하도록 한다.
3. TicketOffice를 자율적인 객체로 만든다.
4. TicketSeller를 TicketOffice의 인터페이스에만 의존하도록 한다.

이 결과 Bag과 TicketOffice의 자율성은 높였다.
하지만, 의존성이 증가하는 단점도 존재한다.
결과적으로 이러한 장단점의 균형을 잘 맞춰 설계하는 것이 중요하다.

결론

현실에서는 수동적인 존재라고 하더라도 일단 객체지향의 세계에 들어오면 모든 것이 능동적이고 자율적인 존재로 바뀐다. 소프트웨어를 구성하는 모든 객체들이 자율적으로 행동하는 설계를 훌륭한 객체지향 설계라고 한다.

 

"좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다."

"훌륭한 객체지향 설계란 협력하는 객체 사이의 의존성을 적절하게 관리하는 설계다."
단지 데이터와 프로세스를 하나의 덩어리로 모으는 것에 멈추지 않고,
협력하는 객체들 사이의 의존성을 적절하게 조절함으로써 변경에 용이한 설계를 만드는 것이 중요하다.

1장 끝

Comments