오브젝트-조영호 책을 보면서 공부하면서 정리한 글입니다.
소프트웨어 모듈의 세 가지 목적
- 실행 중에 제대로 동작하는 것
- 변경을 위해 존재하는 것
- 코드를 읽는 사람과 의사소통하는 것
설계의 목표
- 객체 사이의 결합도를 낮춰 변경이 용이한 설계를 만드는 것이어야 한다.
- 목표를 이루기 위해서는?
- 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것
- 자율성을 높인다 -> 자신의 문제를 스스로 해결하도록 코드를 변경
- 기본적인 원칙을 따라야한다.
응집도 높게? 낮게?
- 응집도를 높게 해야한다.
- 밀접하게 연관된 작업만을 수행하고 연관성 없는 작업은 다른 객체에게 위임하는 객체를 가리켜 응집도가 높다고 말한다.
- 결합도를 낮추면 응집도가 높아짐
- 자신의 데이터를 책임져야 응집도가 높아짐
절차지향과 객체지향
- 절차적 프로그래밍 : 프로세스와 데이터를 별도의 모듈에 위치시키는 방식
- 객체지향 프로그래밍 : 프로세스와 데이터가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식 (자신의 문제를 스스로 처리한다(자율성))
- 훌륭한 객체지향 설계의 핵심 : 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것
설계를 어렵게 하는 것
- 설계를 어렵게 하는것은 의존성이다.
- 해결방법
- 불필요한 의존성을 제거함으로써 객체 상의 결합도를 낮추는 것
- 세부사항을 객체 내부로 감춰 캡슐화를 하는 것
결론
- 불필요한 세부사항을 객체 내부로 캡슐화하고, 객체의 자율성을 높이고 응집도 높은 객체들의 공통체를 창조하여 낮은 결합도와 높은 응집도를 가지고 협력하도록 최소한의 의존성만을 남기는 것을 훌륭한 객체지향 설계라 할 수 있다.
*캡슐화
- 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것
- 목적은 변경하기 쉬운 객체를 만드는 것
*인터페이스
- 클라이언트 프로그램에 어떤 매ㅔ서드를 제공하는지 알려주는 명세 또는 약속이다.
- 추상 메서드의 집합(추상메서드만 가지고 있음. 다른 그 외에는 아무것도 가지고 있지 않음)
- 상속, 구현
- 참고
*구현
- 계획, 아이디어, 모델, 설꼐, 사양, 표준, 알고리즘 또는 정책의 적용 또는 실행을 실현하는 것
- 참고