오브젝트 1장
in Computer Science on OOP
오브젝트 1장
제 1장
패러다임의 시대
- 토마스 쿤 과학혁명
- 과학혁명은 과거의 패러다임이 새로운 패러다임에 의해 대체됨을 의미
- 로버트 플로이드의 프로그래밍 패러다임
- 프로그래밍 또한 패러다임이 존재함을 언급
- 프로그래밍 패러다임
- 절차지향 (C)
- 객체지향 (Java)
- 함수형 (LISP)
- 논리형 (PROLOG)
- No Silver Bullet by Frederick Philips Brooks
- 완벽한 패러다임은 없다.
- 패러다임은 상황에 맞게 적용
객체지향 설계
- 소프트웨어 모듈의 세가지 목적
- 실행 중에 제대로 동작
- 변경을 위해 존재, 간단하게 변경 가능해야함
- 코드를 읽는 사람이 읽기 쉬워야함
- 객체는 자율적이고 책임을 가진 존재
- 다른 객체에 의해 수동적이기 보다는 스스로 행동하게 객체를 만들어야한다.
- 캡슐화를 통해 외부로부터 접근을 제한
- 결국 객체의 응집도를 높여야 한다.
- 객체지향 프로그래밍이란 객체간의 협력
- 객체 사이에는 필연적으로 의존성이 발생
- 의존성이 과하다면 결합도가 높음
- 좋은 설계란 결합도를 낮춰 변경이 용이하게 해야함
- 설계를 어렵게 만드는 것은 의존성
- 의존성을 제거함으로써 객체간의 결합도를 낮춤
- 결합도를 낮추기 위해 캡슐화를 함
- 캡슐화를 통해 객체의 자율성을 높이고 응집도 높은 객체들을 만듦
- 객체지향 세계에서 객체는 생물
- 태어나고, 삶을 영위하고, 죽는다.
- 능동적이며 자율적
- 다른 객체들과 협력
- 설계란 코드를 배치하는 것
- 모든 사람을 만족시킬 수 있는 설계는 없음
- 설계는 Trade-Off의 산물
- 훌륭한 설계는 적절한 Trade-Off의 결과물
- 설계는 균형의 예술
- 좋은 설계란?
- 오늘 요구하는 기능을 온전히 수행하며 내일의 변경을 매끄럽게 수용하는 설계
- 변경을 수용하는 설계는 버그 발생을 억제
- 변경 가능한 코드란 이해하기 쉬운 코드
- 훌륭한 객체지향 설계란 객체 사이의 의존성을 적절히 관리하는 설계
- 이 책은 유연한 객체지향 설계를 하는 법을 배우는 책
Reference
오브젝트 - 조영호