-
1장 - 객체, 설계📕 book/오브젝트 2022. 9. 18. 18:07
티켓 판매 애플리케이션
로버틴 마틴은 소프트웨어 모듈이 가져야 하는 세 가지 기능에 관해 설명
- 모듈 : 크기와 상관없이 클래스나, 패키지, 라이브러리 같은 프로그램을 구성하는 임의의 요소
모든 소프트웨어 모듈에는 3가지 목적이 있다.
- 실행 중에 제대로 동작하는 것.
- 변경을 위해 존재하는 것. ( = 변경이 용이 )
- 코드를 읽는 사람과 의사소통하는 것 ( = 이해하기 쉬워야 한다. )
예상을 빗나가는 코드
- 이해 가능한 코드 : 동작이 우리의 예상에서 크게 벗어나지 않는 코드
- 상식과는 너무나도 다르게 동작
- 코드를 읽는 사람과 제대로 의사소통하지 못한다.
- 코드를 이해하기 위해 여러 가지 세부적인 내용들을 한번에 기억하고 알고 있어야 한다.
- 코드를 작성하는 사람, 읽고 이해해야 하는 사람 모두에게 부담
변경에 취약한 코드
객체 사이의 의존성
의존성 - 변경에 대한 영향을 암시
어떤 객체가 변경될 때 그 객체에게 의존하는 다른 객체도 함께 변경될 수 있다
객체 사이의 의존성을 완전히 없애는 것이 정답 X 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것. [목표] 애플리케이션의 기능을 구현하는 데 필요한 최소한의 의존성만 유지하고 불필요한 의존성을 제거
객체사이의 의존성이 과한 경우 ⇒ 결합도가 높다
- 두 객체 사이의 결합도가 높으면 높을 수록 함께 변경될 확률도 높아진다.
- 변경이 어려워 진다.
설계의 목표 : 객체 사이의 결합도를 낮춰 변경이 용이한 설계를 만든다.
자율적인 객체
캡슐화
객체 내부의 세부적인 사항을 감추는 것.
- 목적 : 변경하기 쉬운 객체를 만드는 것.
- 캡슐화를 통해 객체 내부의 접근을 제한하면 객체와 객체사이의 결합도를 낮출 수 있다.
자율적인 존재
내부 구현을 외부에 노출하지 않고 자신의 문제를 스스로 책임지고 해결한다.
⇒ 변경 용이성의 측면에서도 개선되었다.
캡슐화와 응집도
객체 내부의 상태를 캡슐화하고 객체 간에 오직 메시지를 통해서만 상호작용하도록 만드는 것.
- 민접하게 연관된 작업만 수행하고 연관성이 없는 작업은 다른 객체에게 위임하는 객체
- 응집도가 높다!!!
자율적인 객체 → 결합도 낮추고 응집도를 높일 수 있다.
절차지향과 객체지향
절차적 프로그래밍
프로세스와 데이터를 별도의 모듈에 위치시키는 방식
프로세스가 필요한 모든 데이터에 의존해야 하는 문제점 → 변경에 취약
객체지향 프로그래밍
데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식
캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮춘다.
책임의 이동
객체지향 : 절차적 프로그래밍의 차이를 만드는 것 - 책임의 이동
책임 : 기능을 가리키는 객체지향 세계의 용어
각 객체는 자신을 스스로 책임진다.
객체지향 애플리케이션은 스스로 책임을 수행하는 자율적인 객체들의 공동체를 구성
→ 객체에 어떤 책임을 할당할 것이냐에 초점을 맞춰야 한다.
의인화
능동적이고 자율적인 존재로 소프트웨어 객체를 설계하는 원칙
출처