728x90
객체가 어떤 메시지를 수신하고 처리할 수 있느냐가 책임을 결정한다.
책임 주도 개발에서는 What who 사이클에 따라 협력에 참여할 객체를 결정하기 위한 메시지를 먼저 결정한다.
책임 주도 설계는 객체가 아니라 객체들이 주고받는 메시지에 초점을 맞추게 함으로써 객체지향의 장점을 극대화한다.
what / who 사이클은 어떤 객체가 필요한지를 생각하지말고 어떤 메시지가 필요한지를 먼저 고민하라고 조언한다.
메시지를 결정하기 전까지는 객체에 관해 고민하지 말아야한다.
메시지가 결정된 후에는 이메시지를 처리할 객체를 선택한다.
메시지를 믿어라, 그러면 자율적인 책임은 저절로 따라올것이다.
인터페이스 특징
1. 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 쉽게 대상을 조작하거나 의사를 전달할수있다.
- 자동차가 내부적으로 어떻게 구성돼 있고 어떤원리로 움직이는지 몰라도운전자는 운전하는데 무리가없다.
- 즉 운전에 필요한 기본 동작만 노출시키면된다.
2. 자체는 변경하지 않고 단순히 내부 구성이나 작동방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다.
- 자동차 내부를 변경한다고해도, 운전방식이 달라지지않는다.
3. 대상이 변경되더라도 동일한 인터페이스를 제공하기만해도 아무런 문제없음
- 한 자동차를 운전할줄 안다면 다른 자동차도 쉽게한다.
인터페이스와 구현의 분리
훌륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체를 의미한다.
이것은 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명확하게 분리해서
고려해야 한다는 것을 의미한다.
책임이 자유로울수록 변경에 의해 수정돼야 하는 범위가 좁아지고 명확해진다. 객체지향 커뮤니티의 전문 용어로 표현하자면 변경의 파급효과가 객체 내부로 캡슐화 되기 때문에 두 객체간의 결합도가 낮아진다.
자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.
객체지향의 강력함을 누리기 위해 출발점은 책임을 자율적으로 만드는 것이다.
훌륭한 설계자는 미래에 구체적으로 어떤 변경이 발생할지를 예측하지 않는다.
단지 언젠가는 변경이 발생할 것이며 아직까지는 그것이 무엇인지 모른다는 사실을 겸허하게 받아들인다.
좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨놓는 설계다.
유스케이스
기능적 요구사항이란 시스템이 사용자에게 제공해야하는 기능의 목록을 정리한 것
사용자와 시스템 간의 상호작용을 보여주는 텍스트이다.
다이어그램에 노력을 쏟지말고, 유스케이스에 담겨있는 내용에 힘써라
시나리오가 아니라 여러 시나리오들의 집합이다.
시나리오를 유스케이스 인스턴스 라고한다.
단순한 피처 목록과 다르다.
세부정보를 포함하지 마라
내부 설계와 관련된 정보를 포함하지 않는다.
단지 사용자가 바라보는 시스템의 외부 관점만을 표현한다는 점에 주목하라
실행 메커니즘에 관한 어떤 정보도 제공하지 않는다.
"단지 사용자가 시스템을 통해 무엇을 얻을 수 있고, 어떻게 상호 작용할 수 있느냐에 관한 정보만 기술된다."
유스케이스는 객체가 아니므로 객체의 구조나 책임에 대한 어떤 정보도 제공하지 않는다.
동적 분류: 객체가 한 집합에서 다른 집합의 원소로 자신이 속하는 타입을 변경할 수 있는 경우
정적 분류: 자신의 타입을 변경할 수 없는경우
슈퍼타입 : 다른 타입보다 일반적
서브타입 : 다른 타입보다 좀 더 특수한 타입
객체지향에서 내연의 관점에서 슈퍼타입의 정의가 서브타입의 정의보다 더 일반적이라는 것
728x90
'개발 공부 > 개발독서' 카테고리의 다른 글
| 자바 ORM 표준 프로그래밍 JPA (0) | 2024.07.12 |
|---|---|
| 자바 ORM 표준 프로그래밍 (0) | 2024.07.08 |
| 도메인 주도개발시작하기 DDD핵심개념정리부터 구현까지 (0) | 2024.07.05 |
| 객체지향의 사실과 오해 5/31 159 page (1) | 2024.05.31 |
| 객체지향의 사실과 오해 5/15 118 page (0) | 2024.05.15 |