다시 정리해야 함!!
티켓 판매 애플리케이션 :: 절차 지향 스타일
티켓 판매 애플리케이션 :: 객체 지향 스타일
트레이드 오프...!!
- 모든 요구를 완벽히 만족시키는 구현은 없다. 타협하여야 함.
소프트웨어 모듈의 세 가지 목적
- 제대로 동작하여야 한다.
- 변경이 용이하여야 한다.
- 쉽게 이해가 가능하여야 한다.
객체의 의존성이 과하다?? --> 결합도가 높다
- 의존성을 낮추기 위해 각 객체의 자율성을 높히자 --> 의인화
캡슐화 --> 변경하기 쉬운 객체를 만드는 것.
- 접근을 제한하면 객체와 객체사이의 결합도를 낮출 수 있기 때문에 부담없이 변경할 수 있다.
객체를 인터페이스와 구현으로 나누고 인터페이스 만을 공개하기
절차적 프로그래밍 --> 프로세스와 데이터를 별도의 모듈에 위치시키는 방식
- 데이터의 변경이 특정 지역에만 국한되기가 매우 어렵다!! 의존하는 객체가 너무 많기 때문.
객체지향 프로그래밍 --> 프로세스와 데이터를 동일한 모듈에 위치시키는 방식 ( 정확한 표현은 아니지만 대체로 잘 설명해주는 설명이다)
- 데이터와 그 데이터를 사용하는 프로세스가 동일한 객체 안에 위치
절차 vs 객체 ?? --> "책임의 이동"
- 객체 지향 설계는 각 객체가 자기 자신을 스스로 책임진다(일반적으로)
- 절차 지향은 책임을 지는 놈이 따로 있다.
객체지향은 결국 적절한 객체에 적절한 책임을 할당하는 과정
불필요한 의존성을 제거하여 결합도를 낮춘다.
결합도를 낮추기 위한 방법으로 캡슐화를 사용한다.
- 각 객체의 자율성이 올라가고 따라서 응집도가 상승하다. 이런 응집도가 높은 객체들의 공동체를 구성하는 것이 객체 지향의 목표!!!
참고 :: 오브젝트 :: 코드로 이해하는 객체지향 설계