티스토리 뷰
1장. 표기법과 메타모델
UML을 사용하는 방법들
스케치, 청사진, 프로그래밍 언어
필자의 편견으로는, 이 셋 중에서 가장 보편적인 것은 UML을 스케치로 생각하는 것이다. 이 방식에서는 개발자가 시스템의 어떤 측면에 대해 다른 사람과 의사 소통하는 것을 돕는 목적으로 UML을 사용한다. ... 스케치는 순공학(Forward Engineerging) 또는 역공학(Reverse Engineering)에 사용될 수 있다.
스케치의 핵심은 선택성이다. 순공학에서는 작성하고자 하는 코드의 어떤 문제에 대해서 대강 스케치를 해서 팀 내의 사람들과 의논을 한다.
이 책은 설계를 스케치하는 용도의 UML을 소개하는 책이다.
적법한 UML이란 무엇인가?
언어의 두가지 카테고리
- 규범적인 규칙(Perscriptive rules)을 가진 언어: 공식 단체가 규범을 관리하는 언어. ex) 프로그래밍 언어
- 기술적인 규칙(Descriptive rules)을 가진 언어: 실제로 사람들이 언어를 어떻게 사용하는지를 보고 규칙을 이해하는 언어. ex) 프랑스어
필자는 대부분의 사람들이 UML을 기술적인 규칙으로 받아들여야 한다는 입장이다.
UML 다이어그램을 이해하고 싶다면 UML 표준이 모든 것이 아니라는 것을 깨닫는 것이 중요하다.
필자는 적법하지만 형편없는 설계보다는 적법하지 않지만 좋은 설계가 낫다고 생각한다.
UML의 표준에 얽메이기 보다는 실용주의적으로 사용하자.
UML은 충분하지 못하다.
UML 다이어그램 중에 여러분의 목적에 맞는 것이 없다면 UML이 아닌 다이어그램을 쓰는 것을 주저하지 말라.
(UML 다이어그램 중에서) 여러분의 작업에 도움이 되지 않는 것은 두려워 하지 말고 버려라.
2장. UML을 공정에 적용하기
요구사항 분석
- 유스케이스: 사람들이 시스템과 어떻게 상호작용하는지
- 개념적 관점에서 그려진 클래스 다이어그램: 도메인의 정확한 어휘 구성하는 좋은 방법이 될 수 있음
- 액티비티 다이어그램: 소프트웨어와 사람의 행동이 어떻게 상호작용하는지 나타냄. 복잡한 유스케이스가 어떻게 동작하는지 자세히 보여줄 수 있음
- 상태 다이어그램: 어떤 개념이 다양한 상태와 그 상태를 변경하는 이벤트로 구성되어 흥미로운 생명 주기를 가지고 있을 때
만약 대화하는 데 더 도움이 된다면, 언제든 UML 규칙을 어길 수 있어야 한다.
설계
- 소프트웨어 관점에서의 클래스 다이어그램: 소프트웨어 내의 클래스와 클래스 간의 연관을 보여줌
- 공통 시나리오에 대한 시퀀스 다이어그램: 유스 케이스로 부터 가장 중요하고 흥미로운 시나리오를 찾아내고, 소프트웨어에서 무슨일이 일어나는 지 알아내는 것
- 소프트웨어의 구조를 큰 단위로 나타내는 패키지 다이어그램
- 복잡한 생성 이력을 가지는 클래스들에 대한 상태 다이어그램
- 소프트웨어의 물리적인 레이아웃을 보여주는 배치 다이어그램
청사진에 대한 필자의 우려 중 하나는, 뛰어난 설계자라고 하더라도 올바른 청사진을 얻기가 매우 어렵다는 것을 발견하였다는 것이다. 필자가 만든 설계도 코딩 동안에 그대로 살아남지 못하는 것을 자주 본다.
문서화
조심스럽게 선택해서 잘 기록한 메모는 전통적인 복잡한 설계 문서를 쉽게 대체할 수 있다. 후자는 일부분 외에는 거의 도움이 되지 않는다. 이 일부분을 강조하고 나머지는 잊어버려라. -워드 커닝햄
- 클래스 다이어그램: 가장 중요한 상호작용을 나타내는 몇개
- 상태 다이어그램: 복잡한 생명주기 문서화 (꽤 복잡한 경우에만)
- 액티비티 다이어그램: 복잡한 알고리즘
<특히나 인상깊은 문구>
여러분이 선택하지 않은 설계 대안들과 그렇게 한 이유를 문서화하는 것은 가장 중요한 일 중 하나이다. 가장 잊기 쉬운 것이지만, 여러분이 제공할 수 있는 가장 유용한 대외 문서이다.
오래된 코드 이해하기
코드를 탐색할 때 중요한 부분을 공략하기 위해서 도구를 사용.
복잡한 메서드를 처리하기 위해서 많은 객체들이 어떻게 협력하는 지 보여주는 시퀀스 다이어그램
'Software Design' 카테고리의 다른 글
테스트에 대한 실용적인 접근 Humble Object Pattern - Unit Testing Principles, Practices, and Patterns 책을 읽고 (0) | 2021.04.11 |
---|---|
신림프로그래머 클린코드 발표자료 공개 (0) | 2016.06.19 |
추상화하고 구상클래스 (Concrete class)와 의존성 제거하기 (0) | 2016.05.03 |
클린코드 4장 주석 정리 (0) | 2016.04.17 |
클린코드 1장에서 3장 정리 (0) | 2016.02.12 |
- Total
- Today
- Yesterday
- rest
- ecma6
- 회고
- 개발자
- html
- springboot
- S68
- ES6
- AWS
- 실수노트
- Clean code
- spring boot
- sanur
- ChatGPT
- 웹
- 도커
- AWSKRUG
- 독후감
- 한달살기
- Bali
- javascript
- 컨테이너
- spring
- 객체지향
- hands-on
- Docker
- 웹을 지탱하는 기술
- 사누르
- container
- 발리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |