객체 지향
시작
- 하나의 클래스나 메소드에 너무 많은 세부사항을 다루면 쓰는 사람, 읽는 사람 모두 곤란하다.
- 그런 상황에서 세부적인 구현하나라도 바뀌면 모두 변경해야할 수도 있다.
- 의존성은 변경에 대한 영향도를 의미한다.
캡슐화와 응집도
- 핵심은 객체 내부의 상태를 숨기고 객체와 객체 간 오직 메시지를 통해서 상호작용하게 만들면 된다.
- 본인에게 밀접하게 연관된 작업만을 수행하고 연관성 없는 작업은 다른 객체에게 위임하는 객체를 가리켜 응집도가 높다는 표현을 한다.
- 기본 아이디어는 객체는 스스로의 데이터를 책임져야 한다.
- 객체는 자신의 데이터를 스스로 처리하는 자율적인 존재여야 한다.
- 혹여 자신에게 없는, 필요한 것이 있으면 다른 객체와 협업을 통해서 헤쳐나가야 한다.
절차지향, 객체지향 절차지향 : 프로세스와 데이터를 별도의 모듈에 위치시키는 방식을 절차 지향이라고 한다. -> 프로세스가 데이터에 의존하게 된다. 객체지향 : 데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식을 객체지향이라고 한다.
객체지향 - 결론적으로
- 캡슐화를 이용해서 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮춘다.
- 객체지향 코드는 자신의 문제를 스스로 처리해야 한다는 예상을 만족시켜준다.
- 객체 내부의 변겨잉 객체 외부에 파급되지 않도록 제어할 수 있기에 변경하기 수월하다.
책임의 이동
- 책임은 기능을 의미하는 객체지향 세계의 용어라고 생각해도 된다.
- 객체 지향은 기능을 완성하는 데 필요한 책임이 여러 객체에 걸쳐서 분산되어 있는 것이다.
- 객체지향 설계에는 각 객체에 책임이 적절하게 분배된다.
- 적절한 객체에 적절한 책임을 할당하는 것이 객체지향의 핵심이다.
-
각 객체의 자율성을 높이고 응집도를 높히는 방향으로 결합도를 낮춘다.