반응형
Chapter 01 객체, 설계
- 소프트웨어 유지보수에 대해 중요도가 낮음
- 소프트웨어 모듈이 가져야 하는 세가지 기능(로버트 마틴)
- 실행 중에 제대로 동작하는 것
- 변경을 위해 존재하는 것
- 코드를 읽는 사람과 의사소통하는 것
- 변경에 취약한 코드
- 의존성(dependency): 어떤 객체가 변경될 때, 그 객체에 의존하는 객체도 변경될 수 있음
- 결합도(coupling)가 높은 코드
- 결합도가 높다: 의존성이 강하다
- 결합도가 낮다: 합리적인 수준으로 의존한다
- 객체지향 설계의 목표: 객체 사이의 결합도를 낮춰 변경이 용이한 설계는 만드는 것
- 변경에 유연한 코드
- 자율성을 높이자
- 캡슐화(encapsulation)
- 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것을 캡슐화
- 내부로의 접근을 제한하면 -> 객체와 객체 사이의 결합도를 낮출 수 있음
- 캡슐화(encapsulation)
- 어떻게?
- 자기 자신의 문제는 스스로 해결
- 객체 내부의 상태를 캡슐화하고 객체 간에 오직 메시지를 통해서만 상호작용
- 응집도를 높임
- 응집도(cohesion): 밀접하게 연관된 작업만 수행 (연관성 없는 작업은 다른 객체에게 위임)
- 자율성을 높이자
- 절차지향과 객체지향
- 절차적 프로그래밍(Procedural Programming)
- 프로세스와 데이터를 별도의 모듈에 위치
- 우리의 예상을 쉽게 벗어남
- 책임이 한 객체에 집중
- 변경하기 어려운 코드를 양산
- 객체지향 프로그래밍(Object-Oriented Programming)
- 데이터와 프로세스가 동일한 모듈 내부에 위치
- 동일한 모듈 내부에 위치하기 때문에 예상 범위 안에 있음
- 개별 객체에 책임 할당
- 객체 내부의 변경이 객체 외부에 파급되지 않도록 제어할 수 있기 때무에 변경하기 수월함
- 절차적 프로그래밍(Procedural Programming)
- 객체지향의 핵심
- 적절한 객체에 적절한 책임을 할당하는 것이다.
- 따라서
객체가 어떤 데이터를 가지느냐보다는객체에 어떤 책임을 할당할 것이냐에 초점
- 객체지향의 세계가 우리가 세상을 바라보는 직관과 객체를 완전 일치한다?
- 비록 현실에서는 수동적인 존재라고 하더라도 일단 객체지향의 세계에 들어오는 모든 것이 능동적이고 자율적인 존재
- 좋은 설계란?
- 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계
반응형
'프로그래밍 > 객체지향' 카테고리의 다른 글
Chapter 03 역할, 책임, 협력 (0) | 2022.05.12 |
---|---|
오브젝트:코드로 이해하는 객체지향 설계 Ch.02 (0) | 2022.01.23 |