오브젝트(5)
-
[오브젝트 : 코드로 이해하는 객체지향 설계] 6. 메시지와 인터페이스
1. 협력과 메시지 클라이언트-서버 모델 클라이언트 : 협력 안에서 메시지를 전송하는 객체 서버 : 협력 안에서 메시지를 수신하는 객체 클라이언트 ⇒ Screening / 서버 ⇒ Movie 클라이언트 ⇒ Movie / 서버 ⇒ DiscountPolicy 객체는 협력에 참여하는 동안 클라이언트와 서버의 역할을 동시에 수행한다. 다른 객체와 협력을 가능하게 해주는 매개체 ⇒ 메시지 협력과 관련된 용어 메시지 메시지 : 객체들이 협력하기 위해 사용할 수 있는 의사소통 수단. 메시지는 오퍼레이션명(operation name)과 인자(argument)로 구성된다. 메시지 전송 / 메시지 패싱 : 한 객체가 다른 객체에게 도움을 요청하는 것. 메시지 전송은 메시지에 메시지 수신자를 추가한 것 메시지 전송자 : 메..
2021.09.08 -
[오브젝트 : 코드로 이해하는 객체지향 설계] 5. 책임 할당하기
1. 책임 주도 설계 데이터보다 행동을 먼저 결정하라 협력이라는 문맥 안에서 책임을 결정하라 책임 주도 설계의 흐름 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다. 시스템 책임을 더 작은 책임으로 분할한다. 분할 된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다. 2. GRASP패턴 GRASP(General Responsibility Assignment Software Pattern)⇒ 일반적인 책임 할당을 위한 소프트웨어 패턴으로 객체에게 책임을 할당할 때 지침으로 삼을 수 있는 원칙들..
2021.09.02 -
[오브젝트 : 코드로 이해하는 객체지향 설계] 4. 설계 품질과 트레이드오프
4장에서는 데이터 중심의 영화 예매 시스템을 보고 이것이 얼마나 객체지향과 거리가 멀고, 어떤 설계방법이 객체지향적인지를 보여주는 장입니다. 설계 트레이드오프 캡슐화 - 변경 가능성이 높은 부분을 객체 내부로 숨기는 추상화 기법 구현 - 변경될 가능성이 높은 부분 인터페이스 - 상대적으로 안정적인 부분 변경될 수 있는 어떤 것이라도 캡슐화 해야 한다. 응집도와 결합도 응집도 - 모듈에 포함된 내부 요소들이 연관돼 있는 정도 모듈 내의 요소들이 하나의 목적을 추구하냐(높은) 서로 다른 목적을 추구하냐(낮은)에 따라서 응집도를 갖게 된다. 객체지향에서의 응집도 ⇒ 객체 또는 클래스에 얼마나 관련 높은 책임들을 할당했는지 결합도 - 의존성의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 ..
2021.08.27 -
[오브젝트 : 코드로 이해하는 객체지향 설계] 3. 역할, 책임, 협력
객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정 1. 협력(collaboration) 협력이란 객체들이 기능 구현을 하기 위해 요청과 응답을 통해 상호작용 하는 것을 협력이라고 합니다. 여기서 상영은 영화에 메세지를 전송하여 예매자의 요금 계산을 요청을 합니다. 왜냐하면 영화가 요금 계산을 하기 위해 필요한 기본 요금과 할인 정책을 가장 잘 알고 있기 때문입니다. 상영이 요금계산을 위해 영화의 내부구현에 직접 접근을 하면 캡슐화의 원칙을 위반하게 되고 또한 영화의 내부 구현을 바꾸면 상영도 영향을 받게 되기 때문에 → 자신이 할 수 없는 일을 다른 객체에게 위임하면 협력에 참여하는 객체들의 자율성을 향상 시킬 수 있습니다. ※협력이 설계를 위한 문맥을 결정한다..
2021.08.24 -
[오브젝트 : 코드로 이해하는 객체지향 설계] 1. 객체, 설계
※ 본 게시글은 오브젝트라는 책을 읽고 정리한 글입니다. ※ 소프트웨어 모듈의 세 가지 목적 실행 중에 제대로 동작해야 한다. 변경에 용이해야 한다. ⇒ 요구사항이 항상 변경되기 때문 코드를 읽는 사람과 의사소통이 되어야 한다. 이 책에서는 세 가지 목적을 달성한 훌륭한 객체지향 설계를 할 수 있도록 코드를 변경하며, 어떤것이 좋은 코드인지 설명합니다. 객체지향의 목적 캡슐화, 책임이동, 데이터와 프로세스의 통합으로 결합도를 낮추고 응집도를 높이는 것 의존성과 결합도 결합도 : 모듈과 모듈간의 의존도. 객체 사이의 의존성이 높은 경우 결합도가 높다고 한다. 의존성이 높은 객체 : 객체가 변경될 때 그 객체에 의존하는 다른 객체도 함께 변경될 수 있다. 결합도를 낮추는 방법 1. 캡슐화 캡슐화 : 객체 내..
2021.08.11