Preface
이번 주는 기말고사 기간이라 소프트웨어 공학 공부에 집중하지 못했다.
다음주 월요일 시험을 마지막으로 이번 학기가 종료됨에 따라 개발 공부에 박차를 가할 예정이다.
어제는 학습에 도움을 주는 친구와 함께 공부 및 블로그 업로딩의 방향성에 관한 이야기를 했다.
친구는 내가 지금껏 공부했던 내용들이 이후 더욱 정확한 정보로 대체될 수 있도록 항상 오픈 마인드를 유지해야 하며, 단지 기계적으로 내용을 암기하는 것이 아닌, '왜 그럴까?'라는 생각을 바탕으로 공부하는 자세가 필요하다고 거듭 충고했다.
개발 공부에 도전하기로 마음먹은 뒤, 처음으로 친구에게 이 이야기를 들었을 땐 "초등학교 입학 이후로 대학교 4학년을 바라보는 지금껏 줄곧 수능공부 식으로 공부했던 나에게 있어 'Why?'라는 질문을 바탕으로 공부를 전개한다는 것은 생각보다 어려운 일이 아닐까? 그런 공부 방식이 꼭 필요할까?"라는 생각이 들었다.
그러나 시간이 지나면 지날수록 내가 고수하던 공부 방식은 단지 특정 시험을 위한 하나의 도구에 그칠 뿐, 나를 그 이상 성장시킬 순 없을 것이라는 확신을 가질 수 있었다. 어쩌면 나는 변화가 두려워 스스로를 '암기'라는 익숙한 방에 가두어 놓은 것일지도 모른다.
틀에 박힌 사고방식을 버려야 성공할 수 있다는 말이 있듯, 나 역시 과거의 습관을 버리고 더욱 높게, 더욱 멀리 세상을 바라보고자 한다.
but, 기본 개념을 충분히 익혀야 다양한 고민을 할 수 있고 그에 따른 궁금증을 해결할 수 있기 때문에 빠른 시일 내에 기본서들을 이해하는 것이 필요하다!!
- entity는 '개체'로, object는 '객체'로 구분하자
- 객체지향 개발의 목적 : 데이터와 행위를 하나로 묶어 객체를 정의하고 추상화시키는 작업
- 객체 모델링 : 누구에게 이 일이 필요한가
- 동적 모델링 : 어떤 순서로 일이 진행되어야 하는가
- 기능 모델링 : 어떤 일이 수행되어야 하는가
1. 객체지향 분석 기법 개요
- 객체지향 개발 방법의 기본 개념
① 객체(object)
② 객체의 속성(attribute)
③ 동작(behaviour)
④ 클래스(class)
⑤ 객체 사이의 관계(relationshiip)
→ 개발의 전 과정에 걸쳐 동일한 방법론 및 표현 기법 적용 가능
2. 객체지향 분석 프로세스
- 행위자(actor) : 사용자를 동질성 있는 집단으로 분류한 것
- 캡슐화(encapsulation)의 효과
① 객체 내부 정보의 손상과 오용 방지
② 공개된 오퍼레이션을 정확히 알면 외부에서 해당 객체 사용 가능
③ 객체의 독립성이 구조적으로 보장
- 객체지향 분석 과정
① 각 행위자의 시스템을 사용 용도 및 목적에 따라 사용 사례(usecase) 정리
→ 기능
② 각 유스케이스에 대한 시나리오 작성
→ 동적
③ 유스케이스 시나리오를 통해 행위자와 시스템이 주고받는 정보 탐색
→ 정보
△ 하향식 접근방법 (블랙박스)
▽ 상향식 접근방법 (화이트박스)
④ 시스템 내부의 클래스를 찾아 그들의 관계, 속성 등을 클래스 다이어그램으로 표시
→ 정보
⑤ 시스템 내부의 객체들이 상호작용하는 과정을 조사하여 시퀀스 다이어그램 작성
→ 동적
⑥ 객체들 사이의 이벤트에 대한 논리적 처리과정을 액티비티 다이어그램 작성
→ 기능
3. 정보 모델링 = 객체 모델링
- 시스템에서 요구되는 객체를 찾아내어 객체들의 특성 및 관계를 규명하는 것이다.
- 객체(object instance) : 객체 모델링의 기본 단위 → 엔티티
① 객체의 이름
② 속성값
- 클래스(class) : 유사한 객체들의 모임 → 엔티티 타입
① 클래스 이름
② 객체의 속성
③ 객체의 동작
- 클래스들 사이의 연관성은 관계(relationship)에 의해 표시된다.
→ 정보 모델링에선 마름모로 표시하지만, UML에선 관계 이름만으로 표시 가능
- 연관 클래스(association class) : 관계가 새로운 속성이나 동작을 가지는 경우
→ 관계는 하나의 클래스로 정의되며 다른 클래스와 연관을 맺을 수 있음
- UML에서의 매핑 제약 조건과 참여 제약 조건 표기 방법
- 일반화(generalization)의 특성
① 분석 결과의 재사용을 가능하게 함
② 데이터의 무결성(integrity : 데이터의 정확성 및 일관성 유지) 향상
- 다중상속(multiple inheritance) : 특정 클래스의 상위 클래스가 두 개 있는 경우
→ 모호성을 없애기 위해 요구사향 명세서 및 자료 사전에 기록해야 함
- 집단화(aggregation) : 여러 부속 객체들이 조립되어 하나의 객체가 구성되는 것
→ 클래스들 사이의 '부분-전체(part-whole)' 관계와 '부분(is-a-part-of)' 관계로 설명되는 연관성 표시
4. 동적 모델링
- 시간의 흐름에 따른 객체들과 그들 사이의 변화를 조사하는 것이다.
→ UML 기법은 동적 모델링에 시퀀스 다디어그램, 상태 변화도 사용
- 시퀀스 다이어그램(sequence diagram) : 시나리오를 바탕으로 사건 추적도를 확장하여 객체 모델링에서 밝혀진 클래스 간의 사건 흐름을 나타낸 것
5. 기능 모델링
- 입력 값으로부터 계산을 거쳐 어떤 결과가 나타나는지를 보여주는 것이다.
→ UML 기법은 기능 모델링에서 액티비티 다이어그램 사용
- 어떻게(how to) 유도되었는지의 구현 방법은 고려 X
참고 문헌 : 윤청, 『소프트웨어 공학 에센셜』(생능출판), 2019, p.226~240.
'CS > 소프트웨어 공학 에센셜' 카테고리의 다른 글
소프트웨어 설계 기법 (0) | 2021.06.18 |
---|---|
유스케이스와 UML (0) | 2021.06.15 |
정보 모델링 (0) | 2021.06.05 |
동적 모델링 (0) | 2021.06.03 |
기능 모델링 (0) | 2021.06.02 |
댓글